Contented with little, yet wishing for more.
为收获一点点感到满足,但是希望可以获得更过。
Ubuntu 16.04 Python读取MySQL数据库中文乱码的问题
MySQL数据库安装好之后,发现不能向数据库中插入中文,作为一个伟大的天朝人简直不能忍啊。后来网上百度看到修改配置的解决方案,发现乱七八糟一大堆,很多不能解决问题。
尝试了各种方法,将最简单的解决方案写了下来:
中文乱码的主要原因是数据库编码的问题,因此只需改变数据库的编码。
编辑MySQL配置文件:
$sudo vim /etc/mysql/conf.d/mysql.cnf
添加如下代码:
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
网上一堆配置发现有用的只是这两句。。。。。。
改变配置后重启MySQL服务。(简单粗暴的可以直接重启电脑)
停止mysql:
方式一:sudo /etc/init.d/mysql stop
方式二:sudo stop mysql
方式三:sudo service mysql stop (亲测可行)
重启mysql:
方式一:sudo/etc/init.d/mysql restart
方式二:sudo restart mysql
方式三:sudo service mysql restart
查看修改后的数据库编码命令:
show variables like 'char%'
修改后的MySQL数据库编码如下:
修改好数据库编码之后,以前的数据库要重新建,发现事情还没有解决。。。。。难受
从数据库中读取中文数据乱码
本人开发环境: Ubuntu16.04+eclipse + Python+MySQL
首先使用以下代码连接数据库,一点毛病没有,字符编码也设置好了。
conn=MySQLdb.connect(host='localhost',user='root',passwd='home',db='Student',port=3306,charset='utf8')
数据库中的内容是:
(17,'沈梦家',‘男’)
然而读出来的结果是:
((17L, u'\u6c88\u68a6\u5bb6', u'\u7537'),)
内心很崩溃。。。。。。。。。。还是要坚持解决问题。网上搜了一堆可能的原因如下:
- mysql数据库各项没有设置编码,默认为’latin’
- 使用MySQL.connect的时候没有设置默认编码
- 没有设置python的编码,python2.7默认为’ascii’
- 没有解码decode(’uft-8’)
- varchar和nvarchar的区别
- …….
一个一个试发现都不能解决问题,算了还是喝口水冷静一下,伤不起。。。
最后,摸索一番问题解决了。。。。。。我都不敢相信。。。
输出数据是一个tuple时,中文的那部分显示的Ascll码,但是当我取出元组中的每一个属性时,发现可以正常输出中文。。。。。。我想我该问问佛祖是为什么了。。。,,,
希望我的解决方案可以帮我和我遇到一样问题的同学!!!