我最近在rails应用程序上使用各种输入进行了一轮测试,并且我发现了处理传入请求中的空字符的问题。我的应用程序由Postgresql 8.4数据库支持。事实证明,Postgresql不支持在标准“text”或“varchar”字段中存储空字符。但是,当我尝试通过rails存储其中包含空字符的字符串时,默认行为似乎是在空字符后截断字符串。我认为这是一个问题,因为在截断发生之前验证了字符串。插入空字符可以绕过像长度这样的东西的验证,因为ruby可以很好地处理它们,截断只发生在插入上。
我正在试图找出处理这些输入的最佳方法。对我来说理想的行为就是在处理无效的UTF-8字节时抛出异常。现在,我能想到的唯一选择是显式检查每个输入字符串是否为空字符。我宁愿采用一种通用方法,但我不确定在哪里开始寻找。修补postgresql适配器来检查这是一个选项吗?还是有一些我一直缺少的标准方法?