【发布时间】:2018-06-26 06:41:14
【问题描述】:
我正在使用 pymssql 从 SQL 服务器获取一些数据并将结果存储在 pandas 数据框中。当我尝试选择包含 utf-8 (Farsi) 字符的列时,我收到此错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xca in position 0: invalid continuation byte
但是数据库中的其他列一切正常。
这是我的代码 sn-p,我正在使用 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()
【问题讨论】:
-
[title] 是带有波斯语字符的列吗?如果是这样,
SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='products' AND COLUMN_NAME='title'是否返回 'nvarchar'? -
@GordThompson 是的,[title] 包含波斯语字符。您提到的查询返回空结果。
-
好的,你能用SSMS验证[title]列确实是
nvarchar类型吗? -
另外,表名和列名真的是“产品”和“标题”还是更像 N'محصولات' 和 N'عنوان'?
-
@GordThompson 我在 Ubuntu 上使用 Datagrip 来访问数据库。列名称如“orderId”、“UserId”等。他们是英国人。