同福

Python的pymysql报错UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in position 2: invalid start byte

介绍

介绍

福哥在使用pymysql查询数据的时候发现了一个奇怪的问题,就是MySQL数据库里面明明存储的是正常的中文,但是通过pymysql查出来之后就会报出如下错误:

home/topic/2021/0917/14/bf47a3b626dac5ec4cc59ea1cd8e1381.png

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in position 2: invalid start byte

这是怎么回事??

原因

原来是MySQL包括两个编码参数,一个是连接编码参数,一个是执行编码参数。连接编码就是你的连接的MySQL服务器的系统编码,可以通过“show variables like '%charset%'”查看。而执行编码就是你的数据库的编码,这个你自己应该知道。(什么?不知道?问你经理,或者...你要黑谁的服务器...)

如果这两个没有安装实际的情况写的话,就有可能在读数据的时候触发UnicodeDecodeError的错误了。

解决

系统编码

查询character_set_system的值,就是系统编码了。

home/topic/2021/0922/17/35f9965ee0e806226366635c8f1aa5a4.png

数据库编码

查看创建数据库的sql语句,这里面有数据库的编码。

home/topic/2021/0922/17/59f48623866119754e78c28b82080429.png

示例

这是福哥写的一个示例代码,大家可以参考啊~~

home/topic/2021/0922/17/e46815c39a7aa1838010bf9b0e461d25.png