症状: 读取SSMS数据库,表中含中文的内容呈现乱码。如下

image.png
原因:另一台电脑读取正常,数据库直接查询正常。使用
- Python文件设置编码 utf-8 (文件前面加上 #encoding=utf-8)
- Python连接SQL是加上参数 charset=utf8
- 设置Python的默认编码为 utf-8
- 设置系统默认编码为 utf-8
均无法解决。症结在于SSMS存储中文使用varchar,使用nvarchar则不会出现乱码问题。
解决:
- SQL读取转换为nvarchar
df_imp1 = pd.read_sql('select CONVERT(nvarchar(100),项目名称)项目名称,客户卡号,CONVERT(nvarchar(100),客户姓名)客户姓名 from imp_sap',con=eng)
- DF中解码指定
df_imp2['项目名称'] =df_imp2['项目名称'].map(lambda x:x.encode('latin1').decode('gb2312'))
df_imp2['客户姓名'] =df_imp2['客户姓名'].map(lambda x:x.encode('latin1').decode('gbk'))