2

我正在使用 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)

变量名称、生日和性别是从 Excel 文件中读取的,它们是 Unicode 字符串。当我执行查询并使用 SQL Server Management Studio 查看表或执行获取刚刚插入的数据的查询时,所有用非英语语言编写的数据都会变成问号。用英文编写的数据将被保留并以正确的方式出现在表格中。我尝试添加CHARSET=UTF16到我的连接字符串,但没有运气。我可以使用UTF-8which 工作正常,但作为一个工作约定,我需要保存在我的数据库中的所有数据都是UTF16.

谢谢!

4

2 回答 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 会好很多,即使您仅将它用于简单查询并且不使用对象关系映射的东西)

于 2010-06-10T21:06:52.200 回答
0

我太愚蠢了..问题出在服务器上(不得不将我的排序规则更改为我需要的语言)

谢谢!

于 2010-06-12T14:58:01.203 回答