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

问题描述 投票:0回答:1

我目前在我们的项目中遇到了一个问题,即我从数据库中读取文本,对其进行一些修改,然后再次保存。数据保存在ntext字段中(实际上是XML文档)。我收到的错误是:

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

我们正在与:

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

我怀疑错误与数据编码有关。它在大多数数据库条目中都可以正常工作,但在某些情况下会引发上述错误。从数据库到php再返回时,似乎有些字符的编码混杂在一起。如果将有问题的XML保存到文件中并打开,则会出现一条错误消息,提示XML格式不正确(尽管如果我将xml直接从数据库直接复制到xml验证程序中,则一切正常)。我们已经尝试过滤掉可能有问题的所有控制字符,并且还查找了此错误-但到目前为止,没有任何答案对我真正有用。有谁知道这个错误可能起源的地方?如果我可以确定是哪些字符导致了此问题,也可能会有所帮助,也许我可以在将数据写回到数据库之前将其过滤掉。

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

问候,

Sajus

php sql-server freetds
1个回答
0
投票

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

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

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

当我改变了

‘VALUE’

to

'VALUE'

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

© www.soinside.com 2019 - 2024. All rights reserved.