pyODBC 和 Unicode
我正在使用pyODBC与MS SQL 2005 Express服务器进行通信。我要保存数据的表格包含nvarchar类型的列。
query = u"INSERT INTO tblPersons (name, birthday, gender) VALUES('"
query = query + name + u"', '"
query = query + birthday + u"', '"
query = query + gender + u"')"
cur.execute(query)
变量name、birthrday和gende是从Excel文件中读取的,它们是Unicode字符串。当我执行查询并查看SQL Server Management Studio中的表格,或者执行一个查询来获取刚插入的数据时,所有用非英语写入的数据都变成了问号。而用英语写入的数据则正常显示在表格中。
我尝试在连接字符串中添加CHARSET=UTF16
,但没有成功。我可以使用UTF-8
,这没问题,但作为工作惯例,我需要将所有数据保存为UTF16
格式。
谢谢!
2 个回答
2
这可能和pyodbc使用的odbc驱动有关。如果那个驱动不支持unicode,你可能需要自己对参数进行编码,比如用name.encode('utf-16')
。
另外,你真的应该使用查询参数,而不是自己拼接SQL字符串,比如:
query = "INSERT INTO tblPersons (name, birthday, gender) VALUES (?, ?, ?)"
cur.execute(query, [name, birthday, gender])
我怀疑这对你的unicode问题没有帮助,但这样做更安全,也更简单。
(还有一个不相关的小建议:通过sqlalchemy使用pyodbc会更好,即使你只是用它来做简单查询,而不使用对象关系映射的功能)
0
我真是太笨了……问题出在服务器上(我需要把我的排序规则改成我需要的语言)
谢谢!