我想从 python 2.6 获取 SQL Server 2008 中的一个字段。这是我的 freeTDS .conf 文件:
[ARGSERVER03]
host = 192.168.1.3
port = 1433
tds version = 7.0
代码如下:
conn = pymssql.connect(host='192.168.1.3', user='****', password='****', database='TrafficMonitor', as_dict=True, charset='UTF-8')
i = 0
cur.execute('SELECT * FROM dbo.tblTrafficCounterData')
while i < 10:
car = cur.fetchone_asdict()
if car is None:
break
c = car['Class']
print c
i = i + 1
但是它给出了:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xd3 in position 0: invalid continuation byte
Unicode 字段是波斯语。回溯是针对行 car = cur.fetchone_asdict()
[编辑]
我已经从 sql server management studio 检查了数据库属性中的数据库排序规则,它是:
Arabic_CI_AS
但是当我在字符集中使用它时,它会给出:
LookupError: unknown encoding: Arabic_CI_AS
最佳答案
您是否非常确定 SQL Server 使用的是 UTF-8(由您的 charset='UTF-8'
指示)?通常,我遇到的大多数 SQL Server 实例都使用 Microsoft 编码(而非 UTF-8),例如 cp1252(在美国)。
一些可以帮助您发现正确编码的事情:
SELECT DATABASEPROPERTYEX('dbname', 'Collation') SQLCollation
关于python - 将 pymssql 与 freetds 一起使用时出现 UnicodeDecodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10010994/