Python2-Pymysql中文写入
python27的编码是一大难点,然而这次的难点并不是在于python,而在于数据库。
前言
最近在使用Pymysql向mysql数据库写入中文时,发现出现Warning:(1366, u”Incorrect string value: ‘\x······”)
数据库里面的结果为乱码
解决思路
看到中文乱码,马上就想到编码问题。该问题共涉及到三处编码(有可能还多,想不出来了):数据库编码、数据来源编码、脚本连接编码。由于数据来源编码能肯定为Unicode,因此需要从脚本连接编码、数据库编码去解决。
解决历程
脚本连接编码
由于pymysql支持charset字段,下意识想到通过charset参数进行设置。
1 | import pymysql.cursors |
然后重新运行脚本,发现并没有解决。
数据库编码
查看数据库编码,发现数据库默认编码为latin1。
1 | show variables like "char%"; |
找到问题所在就方便了!修改database编码即可。
由于我使用的是debian,需要修改/etc/mysql/my.cnf文件。
1 | vim /etc/mysql/my.cnf |
在[mysqld]字段下面添加character-set-server=utf8,保存并重启mysql服务即可。
重新查询数据库编码。
美滋滋的运行代码,发现还是Warning!!!
最终解决
在修改了数据库编码以为脚本可以成功运行的时候,现实跟我说too young!后面兜兜转转,发现重新建立数据库即可!
总结
- Python27遇到中文的时候,需要特别注意编码;
- Python进行数据交互的时候,每个地方的编码都需要注意;
- 配置修改之后,一定要刷新或者新建!!!