FreeTDS 版本 0.82
unixODBC 版本 2.3.0
pyodbc 版本 2.1.8
freetds.conf:
tds version = 7.0
client charset = UTF-8
在 odbc.ini 中使用 Servername(出于某些疯狂的原因,这在让 unixODBC 识别 freetds 中的客户端字符集方面有所不同)
我能够正确提取 utf8 数据,并且可以使用内联字符串进行更新,即:
UPDATE table
SET col = N'私はトカイ大好き'
WHERE id = 182333369
但
text = u'私はトカイ大好き'
cursor.execute("""
UPDATE table
SET column = ?
WHERE id = 182333369
""", text)
失败:
pyodbc.Error: ('HY004', '[HY004] [FreeTDS][SQL Server]
Invalid data type (0) (SQLBindParameter)')
如果我添加:
text = text.encode('utf-8')
我收到以下错误:
pyodbc.ProgrammingError: ('42000', '[42000] [FreeTDS][SQL Server]传入的表格数据流 (TDS) 协议(protocol)流不正确。流意外结束。(4002) (SQLExecDirectW)')
关于事情出错的地方有什么想法吗?
最佳答案
Unicode 支持在 pyodbc 3.0.x 中重新设计。尝试使用最新源(3.0.2-beta02 等)进行测试
关于unicode - 使用 FreeTDS 和 unixODBC 时 Pyodbc utf-8 绑定(bind)参数错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6037420/