python django mysql写入中文乱码_python django MySQLdb 连接 mysql 5.5 中文乱码问题的解决...

mysql> SHOW VARIABLES LIKE 'character%';

+----------------------------------------+-------------------------

| Variable_name|Value

+----------------------------------------+-------------------------

| character_set_client | latin1

|character_set_connection | latin1

|character_set_database | utf8

| character_set_filesystem | binary

| character_set_results|latin1

| character_set_server|utf8

| character_set_system|utf8

| character_sets_dir|D:\mysql\share\charsets\

+----------------------------------------+-------------------------

8 rows in set (0.00 sec)

mysql>SHOW VARIABLES LIKE 'collation_%';

+---------------------------------------+------------------

| Variable_name|Value

+---------------------------------------+------------------

| collation_connection |latin1_swedish_ci

| collation_database|utf8_general_ci

| collation_server|utf8_general_ci

+--------------------------------------+------------------

3 rows in set (0.00 sec)

从中我们可以看出,整个编码中,不全是utf8编码的。这样就会造成一些问题,例如:我们抓取的中文是utf8编码的,然后传给mysql,但是mysql的connection和server都是latin1编码的,而表示utf8,于是提交的utf8中文内容,会先被latin1编码,然后再由utf8编码。如果这样的话,再用第三方软件访问数据库就会出现问题,例如用phpadmin等,访问的虽然是utf8内容,但是是由latin1编码过后的utf8字符,不免会出现问题。

解决的方式:当然就是编码统一,全部采用utf8编码方式。如何更改?这里只介绍mysql5.5 以上的修改方式,我的mysql是5.5.29的。修改方式如下:

打开mysql配置文件:sudovim /etc/mysql/my.cnf

[mysqld] character-set-server=utf8 collation-server=utf8_general_ci

[client] default-character-set=utf8

在配置文件中,对应的标签中,添加以上字符编码内容。

之后重启mysql服务:sudo/etc/init.d/mysql restart

如果重启成功,说明配置文件没有问题,如果重启失败,说明配置文件有问题,可能你用的mysql版本不是如上的修改方式,可以上网查对应版本的utf8编码的修改方式。

这样,在用刚才的方式查看SHOWVARIABLES LIKE '%char%';,应该都是utf8编码了。(有一个是binary编码的,不用管)

读取时候的编码定义

例如在用MySQLdb读取数据库内容时候,可以定义读取数据库的编码方式:

MySQLdb.connect(server, user, passwd, dbname,charset="utf8")

另外在python头部也可以定义一些中文编码的方式,例如:

#-*- coding: UTF-8 -*-

importsys

reload(sys)

sys.setdefaultencoding('utf8')

总之,在整个过程中,一定要保持编码方式的统一,从网上抓取下来的数据,也要先encode一下,整个过程中如果编码都是utf8,那无论怎么读取都不会出现乱码啦。

#http://blog.sina.com.cn/s/blog_4aa65a3f01018xgk.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值