首页 > 解决方案 > Python的pymssql库中的UnicodeDecodeError

问题描述

我正在使用 pymssql 从 SQL 服务器获取一些数据并将结果存储在 pandas 数据框中。当我尝试选择包含 utf-8 (Farsi) 字符的列时,我收到此错误:

UnicodeDecodeError:“utf-8”编解码器无法解码位置 0 的字节 0xca:无效的继续字节

但是数据库中的其他列一切都很好。

这是我的代码片段,我正在使用 python3.6 运行代码:

import pymssql
import pandas as pd

conn = pymssql.connect(server, username, password, database)
cursor = conn.cursor(as_dict=True)

cursor.execute("""
 SELECT id, title
 FROM products
""")


df = pd.DataFrame(columns=['id', 'title'])

for row in cursor:
    df = df.append(row, ignore_index=True)


conn.close()

标签: pythonpymssql

解决方案


您是否 100% 确定数据以 UTF-8 存储?运行该命令SELECT SERVERPROPERTY('Collation');应该可以帮助您确定数据在数据库中的编码方式。

我认为默认编码是 Latin-1,这意味着 0xCA 是“大写 E 抑扬符 (Ê)”。

charset="ISO-8859-1"您可以通过将参数添加到连接参数来配置 pymssql 以使用该编码访问数据库。


推荐阅读