我正在使用DBD::Sybase的FreeTDS驱动程序,连接到MS。当我查询某些记录的某些值时,会得到以下错误:
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字符集字符的记录中,例如从用户的Outlook和Word消息中复制和粘贴的卷曲引号。
不幸的是,我对这个数据库没有任何控制;在输入的过程中清除输入显然是可行的,但我无法使用。
我需要更改哪些FreeTDS设置才能成功地查询这些记录?
其他信息:
从tsql可以很好地执行查询。我只通过Perl的DBD::Sybase接口获得此错误。(我应该测试其他的东西吗?我还不具备安装PHP或Python的专业知识。我有jTDS,可以使用它,但我认为这是一个完全不同的实现,而不是FreeTDS的接口。)
添加
client charset = UTF-8我的freetds.conf文件的结果是“内存不足!”打印到STDERR。
发布于 2010-05-05 00:01:20
我最近也遇到了类似的问题。
在您的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做的,考虑到Perl是客户端,我希望UTF-8也是最好的选择。
发布于 2010-05-04 23:47:56
检查这是否有帮助(来自Sybase手册,但也可以在MSSQL上工作):
在会话期间控制字符转换
set char_convert允许用户决定在特定工作会话期间字符集转换的操作方式。使用set char_convert:*设置字符集转换on或off *开始转换为特定字符集*打开或关闭set char_convert的语法转到错误报告: set char_convert {off {on 带有{error =带有}} charset 带有{error =带有}}
https://serverfault.com/questions/141088
复制相似问题