我正在使用DBD :: Sybase的FreeTDS驱动程序,连接到MS SQL Server。 当我查询某些logging的某些值时,我得到这个错误:
DBD::Sybase::st fetchrow_arrayref failed: OpenClient message: LAYER = (0) ORIGIN = (0) SEVERITY = (9) NUMBER = (99) Server , database Message String: WARNING! Some character(s) could not be converted into client's character set. Unconverted bytes were changed to question marks ('?').
这似乎发生在包含特殊Windows字符集字符的logging中,例如curl的引号,从人们的Outlook和Word消息中复制和粘贴。
不幸的是,我对这个数据库没有任何控制。 在途中清理input显然是一种去路,但是对我来说是不可用的。
我需要更改哪些FreeTDS设置才能成功查询这些logging?
附加信息:
查询从tsql工作正常。 我只通过Perl的DBD :: Sybase接口得到这个错误。 (我应该通过别的方法来testing吗?我还没有安装PHP或Python的专业知识,我有jTDS并可以使用它,但我认为这是一个完全不同的实现,而不是FreeTDS的接口。
添加
client charset = UTF-8
我的freetds.conf文件导致“内存不足”! 打印到STDERR。
我最近有类似的问题。
在你的freetds.conf文件中,你需要一个类似于下面的条目:
[DataSourceName] host = <IP Address> port = <databaseport> #version 8.0 seems to work with sql server 2005 tds version = 8.0 client charset = UTF-8
客户端字符集是这里的重要一点。
我是从Linux的Perl这样做的,我期望UTF-8是最好的select,因为Perl是客户端
检查这是否有帮助( 从Sybase手册 ,但也可以在MSSQL服务器上):
控制会话期间的字符转换
设置char_convert允许用户决定如何在特定的工作会话期间字符集转换操作。 使用set char_convert来:
* Set character set conversion on or off * Start conversion into a specific character set * Turn error reporting on or off设置char_convert的语法是:
设置char_convert {off |
{在[与{错误| no_error}]} | charset [与{错误| NO_ERROR}]}