您的位置:首页 > 编程语言 > Python开发

Ubuntu 16.04 Python读取MySQL数据库中文乱码的问题

2017-10-22 20:24 423 查看
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码,但是当我取出元组中的每一个属性时,发现可以正常输出中文。。。。。。我想我该问问佛祖是为什么了。。。,,,

希望我的解决方案可以帮我和我遇到一样问题的同学!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: