Pyodbc MS SQL Server语言 - 中文变成胡言乱语



我正在尝试使用pyodbc将中文字符插入MS SQL Server数据库。 在 SSMS 中运行以下查询会产生预期的结果:

INSERT INTO TestTable (testvalue) VALUES (N'面包');
SELECT * FROM TestTable;
testvalue
面包

但是,尝试对pyodbc进行相同的操作:

testvalue
é¢åŒ…

我做错了什么?这是我的pyodbc代码:

connection = pyodbc.connect(
f'Driver={{SQL Server}};CHARSET=UTF8;Server={SERVER};Database=Test;Trusted_Connection=yes'
)
connection.setencoding(encoding='utf-8')
connection.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
connection.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
cursor = connection.cursor()
cursor.execute(
'''
INSERT INTO TestTable (testvalue) VALUES (N'面包');
'''
)
connection.commit()

testvalue被定义为 nvarchar(50(。 我正在使用python 3.8。

提前感谢!

首先,使用参数化查询。

接下来,根据pyodbc Unicode页面:

Microsoft SQL Server

SQL Server 的最新驱动程序与规范匹配,因此无需配置。建议使用 pyodbc 默认值。

以下是将 Unicode 字符插入具有 nvarchar 列的 SQL Server 表所需的全部内容:

import pyodbc
connection = pyodbc.connect('Driver={ODBC Driver 17 for SQL Server};Server=(local);Database=StackOverflow;Trusted_Connection=yes;')
cursor = connection.cursor()
cursor.execute('INSERT dbo.TestTable (TestValue) values (?);', ('面包'))
connection.commit()

在Python 2.x中,你需要使用带有u(Unicode(前缀u'面包'的字符串文字,但这在Python 3.x中不是必需的。根据 Python 如何做 Unicode:

在 Python 3 中,只有一种字符串类型。它的名字是str,它是Unicode。

上面的代码已经过测试,可以与 Python 3.6.8 和 pyodbc-4.0.30 一起对抗 SQL Server 2017。

相关内容

  • 没有找到相关文章

最新更新