ski*_*ppy 7 perl sql-server freetds dbi
我将 FreeTDS 驱动程序与 DBD::Sybase 一起使用,连接到 MS SQL Server。当我查询某些记录的某些值时,出现此错误:
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 ('?').
Run Code Online (Sandbox Code Playgroud)
这似乎发生在包含特殊 Windows 字符集字符的记录中,例如从人们的 Outlook 和 Word 消息中复制和粘贴的卷曲引号。
不幸的是,我对这个数据库没有任何控制权;清理输入的方式显然是要走的路,但对我来说不可用。
我需要更改哪些 FreeTDS 设置才能成功查询这些记录?
附加信息:
查询在 tsql 中运行良好。我只通过 Perl 的 DBD::Sybase 接口得到这个错误。(我应该通过其他方式进行测试吗?我还没有安装 PHP 或 Python 的专业知识。我有 jTDS 并且可以使用它,但我认为这是一个完全不同的实现,而不是 FreeTDS 的接口。)
添加
client charset = UTF-8
Run Code Online (Sandbox Code Playgroud)
到我的 freetds.conf 文件导致“内存不足!” 打印到 STDERR。
小智 2
检查这是否有帮助(来自 Sybase 手册,但也可能适用于 MSSQL 服务器):
在会话期间控制字符转换
set char_convert 允许用户决定在特定工作会话期间如何进行字符集转换。使用设置 char_convert 为:
Run Code Online (Sandbox Code Playgroud)* Set character set conversion on or off * Start conversion into a specific character set * Turn error reporting on or off
set char_convert 的语法是:
设置 char_convert {关闭 |
{上[与{错误| 无错误}]} | 字符集 [with {error | 无错误}]}
归档时间: |
|
查看次数: |
4393 次 |
最近记录: |