Python连接mysql数据库时,读取数据库中的中文出现乱码,所有中文都显示为问号了,我解决问题的步骤如下:
开发环境
- Python版本:python3.6
- MySql版本:mysql-5.5.56-winx64
- PyMySQL 版本:PyMySQL (0.7.11)
执行pip install PyMySQL 完成pyMySQL安装
数据库部分
-- 建表语句
CREATE TABLE books (
name varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 插入数据
insert into books values('万物生光辉');
insert into books values('我亲爱的甜橙树');
insert into books values('教父');
insert into books values('故事');
insert into books values('树上的男爵');
insert into books values('罗马人的故事2');
insert into books values('秘岛(全三册)');
python代码
#!/usr/bin/env python
import pymysql.cursors
connection = pymysql.connect(user='用户名', passwd='密码', db='数据库名')
cursor = connection.cursor()
ex = cursor.execute("select name from books")
books = cursor.fetchmany(ex)
for book in books:
print("%s" % book[0])
connection.close()
执行结果
解决乱码方法如下:
- Python文件设置编码 utf-8 (文件前面加上 #encoding=utf-8)
- MySQL数据库charset=utf-8
- Python连接MySQL是加上参数 charset=’utf8’
- 读取数据后写入文件前执行编码book[0].encode(‘utf-8’)
最后测试的时候发现只需在连接MySQL的时候加上charset=’utf8’即可,以utf-8编码格式读取数据,其他条件无需添加,也不会出现从mysql中读取的数据出现中文乱码的情况。其他方法加上也没有问题,为了
修改后python代码
#!/usr/bin/env python
import pymysql.cursors
# 在连接Mysql的时候添加charset='utf8'即可解决中文乱码问题
connection = pymysql.connect(user='用户名', passwd='密码', db='数据库名', charset='utf8')
cursor = connection.cursor()
ex = cursor.execute("select name from books")
books = cursor.fetchmany(ex)
for book in books:
print("%s" % book[0])
connection.close()
修改后的执行结果
希望以上的笔记能帮到各位码友,如有出错请告知,谢谢各位码友。~///(^v^)\\~