将字符转换为服务器的字符集时出错

时间:2017-07-10 11:55:12

标签: php sql-server freetds

我目前在我们的项目中遇到问题,我从数据库中读取文本,稍微修改它然后再将其保存。 数据保存在ntext-field中(实际上是一个XML文档)。 接收的错误是:

  

Zend_Db_Statement_Exception:SQLSTATE [HY000]:常规错误:2402   [FreeTDS] [SQL Server]将字符转换为服务器时出错   字符集。某些字符无法转换   (SQLExecute [2402] at   /build/php5-F6w79J/php5-5.5.9+dfsg/ext/pdo_odbc/odbc_stmt.c:254)

我们正在努力:

  • PHP 5.5.9-1ubuntu4
  • Freetds-Version 7.2(和客户端charset = UTF-8)
  • Microsoft SQL Server 2012

我怀疑错误与数据编码有关。它对大多数数据库条目都很好用,但有些引发了上述错误。似乎有一些字符的编码在从数据库到php然后再返回的某个地方混淆了。如果将有问题的XML保存到文件并打开,则会出现一个错误,指出XML格式不正确(尽管如果我将xml直接从数据库复制到xml-validator中,一切正常)。 我们已经尝试过滤掉任何可能存在问题的控制字符,并且看起来也出错了 - 但到目前为止,没有任何答案对我有效。 有谁知道这个错误可能来自哪里?如果我能确定哪些字符导致了这个问题,也可能有帮助,也许我可以在将数据写回数据库之前将其过滤掉。

如果需要任何其他信息,我很乐意提供帮助。

问候,

Sajus

1 个答案:

答案 0 :(得分:0)

检查您的代码中是否没有非ASCII字符。

我收到此错误,当我仔细查看时,发现自己有:

update TABLE set SOMETHING = null where IDENTIFIER = ‘VALUE’

当我更改了

‘VALUE’

'VALUE'

即我使用香草ASCII直引号而不是6和9引号... 问题消失了。