Pyodbc MS SQL 服务器 - 中文变成乱码
Pyodbc MS SQL Server - Chinese turns into gibberish
我正在尝试使用 pyodbc 将中文字符插入到 MS SQL 服务器数据库中。
运行 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 page:
Microsoft SQL Server
SQL Server's recent drivers match the specification, so no configuration is necessary. Using the pyodbc defaults is recommended.
以下是将 Unicode 字符插入具有 nvarchar 列的 SQL 服务器表所需的全部内容:
import pyodbc
connection = pyodbc.connect('Driver={ODBC Driver 17 for SQL Server};Server=(local);Database=Whosebug;Trusted_Connection=yes;')
cursor = connection.cursor()
cursor.execute('INSERT dbo.TestTable (TestValue) values (?);', ('面包'))
connection.commit()
在 Python 2.x 中,您需要使用带有 u
(Unicode) 前缀的字符串文字,u'面包'
,但这在 Python 3.x。根据 How Python does Unicode:
In Python 3, there is one and only one string type. Its name is str and it’s Unicode.
以上代码已通过 Python 3.6.8 和 pyodbc-4.0.30 针对 SQL Server 2017 的测试。
我正在尝试使用 pyodbc 将中文字符插入到 MS SQL 服务器数据库中。 运行 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 page:
Microsoft SQL Server
SQL Server's recent drivers match the specification, so no configuration is necessary. Using the pyodbc defaults is recommended.
以下是将 Unicode 字符插入具有 nvarchar 列的 SQL 服务器表所需的全部内容:
import pyodbc
connection = pyodbc.connect('Driver={ODBC Driver 17 for SQL Server};Server=(local);Database=Whosebug;Trusted_Connection=yes;')
cursor = connection.cursor()
cursor.execute('INSERT dbo.TestTable (TestValue) values (?);', ('面包'))
connection.commit()
在 Python 2.x 中,您需要使用带有 u
(Unicode) 前缀的字符串文字,u'面包'
,但这在 Python 3.x。根据 How Python does Unicode:
In Python 3, there is one and only one string type. Its name is str and it’s Unicode.
以上代码已通过 Python 3.6.8 和 pyodbc-4.0.30 针对 SQL Server 2017 的测试。