Pyodbc utf-8使用FreeTDS和unixODBC绑定param错误

时间:2011-05-17 21:32:25

标签: unicode odbc pyodbc freetds

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)协议流不正确。流意外结束。(4002)(SQLExecDirectW)')< / p>

关于事情误入歧途的任何想法?

1 个答案:

答案 0 :(得分:1)

在pyodbc 3.0.x中重新编写了Unicode支持。尝试使用最新的源代码(3.0.2-beta02等)进行测试