【Pymssql】(已解决)使用cursor.fetchall()方法获取SQL语句执行结果时,出现中文乱码

文章讲述了在使用Python的pymssql库连接SQLServer并执行查询时遇到的中文乱码问题。通过分析,确定原因是数据库字符集与Python解释器字符集不一致。通过在连接字符串中指定charset=cp936而非常见的utf8,成功解决了乱码问题。此外,文章还介绍了字符集的概念,特别是CP936(GBK)编码在Windows系统中的应用。
摘要由CSDN通过智能技术生成

1.背景

最近在做数据库大作业,准备用Python的pymssql库连接SQL Sever,然后用tkinter做一个简单的图形界面。

当时执行查询语句后,利用cursor.fetchall()方法获取执行结果的时候出现中文乱码,就像这样:
代码:

self.cursor.execute("select * from director where dno = '" + self.no.get()+"'")  
data = self.cursor.fetchall()

结果:
汉字部分出现乱码,如图
(‘1111111111’, 'Áõ¿¡ ', 20, 'ÄÐ ', '»úе2203 ', ‘1’, '1111111111 ')
在这里插入图片描述

2.分析

查了资料,出现中文乱码的原因可能是由于数据库中存储的字符集与Python解释器所使用的字符集不一致导致的。

可以在连接数据库时,通过指定字符集来解决这个问题。例如,如果数据库中存储的字符集是UTF-8,可以在连接字符串中添加charset='utf8'参数。

但是我试了发现utf8不行,最后改成了charset="cp936",就没有了乱码,具体如下。

3.修改

原来连接数据库的语句如下:

conn = pymssql.connect(host="localhost", port="1433", user=self.user, password=self.password)

加上charset参数后:

conn = pymssql.connect(host="localhost", port="1433", user=self.user, password=self.password,charset="cp936")

再运行就会发现已无乱码。

4.拓展

  • 数据库中存储的字符集是指用于表示和存储数据的一种编码方式。不同的字符集可以支持不同的语言和字符,例如UTF-8字符集可以支持中文、日文、韩文等亚洲语言,而ASCII字符集则只能支持英文字母和数字等字符。

  • CP936是一种中文字符集编码,也称为GBK编码。它是由中国国家标准委员会制定的一种汉字编码标准,用于将汉字转换为计算机能够识别的二进制代码。CP936编码支持简体中文、繁体中文和日文等多种语言,并且可以表示超过70,000个汉字和50,000个汉字拼音。

  • 在Windows操作系统中,默认使用CP936编码来处理文本文件,因此如果你在Windows下编写或编辑文本文件时,需要确保文件的编码格式为CP936。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还重名就过分了啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值