Python mysqldb 操作mysql出现中文乱码问题
来源:互联网 发布:永恒纪元戒官网通知 编辑:程序博客网 时间:2024/05/01 17:51
一.mysql本身的问题:
1.数据库编码问题:
mysql数据库本身有默认编码,可以通过status; 或show variables like 'character_set_%'; 命令来查看。比如用后者查看时,会看到一系列形如“character_set_xxxxx”的全局变量,这就是数据库的默认编码。所有数据表、表中字段,在创建时,若没有专门指定编码格式,都会默认使用数据库编码。
修改数据库编码有两种方式,(1)set character_set_xxxxxx = 'xxxxx'(编码名称), 即直接修改全局变量的值。(2)修改mysql配置文件—— 在windows下,mysql配置文件为my.ini,在linux下,mysql配置文件为my.cnf。修改其中相应字段即可。
需要注意的是:mysql版本不同时,配置文件的修改方式也有所不同,这一点具体内容可以自行百度。
2.数据表默认编码问题:
数据表自身也有默认编码,若建表时未指定编码,则表的编码默认采用当前的数据库编码。而修改数据库编码时不会影响已存在的表的编码。所以要想修改某个已有的表的编码方式,则只能直接改表而不能改数据库。
小结:
1.mysql的编码是各级独立的,在没有指定编码格式的条件下,下一级默认与上一级编码方式相同(第一级——数据库,第二级——数据表,第三级——表中字段);各级编码可以单独指定,允许不同;修改某一级编码不影响任何已存在的内容及其编码格式。
2.所以修改后一定要查看各级状态信息,确定已经完全一致才可以,否则很可能由于各级独立而导致状态信息不一致。
二.mysqldb的问题:
但是,即便修改了数据库的编码,在python中还是会存在中文存入数据库时候的乱码问题,解决方法就是在链接数据库的时候指定编码。例如:
sql_con = MySQLdb.connect(host=MYSQL_ADDR , user=MYSQL_USER , passwd=MYSQL_PWD , db=MYSQL_DB , charset="utf8")
三.Python自身的编码问题:
Python内部处理编码默认是ascii,虽然python在很多情况下可以自行检测输入数据的编码格式并进行相应的处理,但有些时候还是会有问题。如果能够确定输入的中文数据是哪种编码(通常最多见的就是utf8),那么最好是将python内部默认编码改成这种编码。
查看python系统编码:
import sys
print sys.getdefaultencoding()
修改python系统编码:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
(一定要有reload(), 否则会报错:找不到该方法)
1.数据库编码问题:
mysql数据库本身有默认编码,可以通过status; 或show variables like 'character_set_%'; 命令来查看。比如用后者查看时,会看到一系列形如“character_set_xxxxx”的全局变量,这就是数据库的默认编码。所有数据表、表中字段,在创建时,若没有专门指定编码格式,都会默认使用数据库编码。
修改数据库编码有两种方式,(1)set character_set_xxxxxx = 'xxxxx'(编码名称), 即直接修改全局变量的值。(2)修改mysql配置文件—— 在windows下,mysql配置文件为my.ini,在linux下,mysql配置文件为my.cnf。修改其中相应字段即可。
需要注意的是:mysql版本不同时,配置文件的修改方式也有所不同,这一点具体内容可以自行百度。
2.数据表默认编码问题:
数据表自身也有默认编码,若建表时未指定编码,则表的编码默认采用当前的数据库编码。而修改数据库编码时不会影响已存在的表的编码。所以要想修改某个已有的表的编码方式,则只能直接改表而不能改数据库。
查看数据表编码: show create table <table name>; 输出结果中的DEFAULT CHARSET即为该表编码。
修改数据表编码: alter table <table_name> character set <charset_name>;3.数据表中字符型字段(char、varchar、text等)的编码问题:
在建表时,或者在已有表中修改、新增字符型字段(char, varchar, text等)时,这些字段的编码格式与表的默认编码相同。而且,修改表的默认编码格式不影响已存在的字段的编码格式。所以同样,在修改数据表编码后,如果没有修改已有字段的编码格式,还是会乱码。必须要对字段编码格式进行手动修改。查看字段编码格式:show create table <表名>; 这一命令同时显示出表和表中各字段编码格式。
修改字段编码格式:
alter table <table_name> modify <column_name> … CHARACTER SET <charset_name>;
(参见修改数据表时modify与change的用法)
小结:
1.mysql的编码是各级独立的,在没有指定编码格式的条件下,下一级默认与上一级编码方式相同(第一级——数据库,第二级——数据表,第三级——表中字段);各级编码可以单独指定,允许不同;修改某一级编码不影响任何已存在的内容及其编码格式。
2.所以修改后一定要查看各级状态信息,确定已经完全一致才可以,否则很可能由于各级独立而导致状态信息不一致。
二.mysqldb的问题:
但是,即便修改了数据库的编码,在python中还是会存在中文存入数据库时候的乱码问题,解决方法就是在链接数据库的时候指定编码。例如:
sql_con = MySQLdb.connect(host=MYSQL_ADDR , user=MYSQL_USER , passwd=MYSQL_PWD , db=MYSQL_DB , charset="utf8")
这就指定了客户端的编码是utf8,然后就解决了乱码问题。
三.Python自身的编码问题:
Python内部处理编码默认是ascii,虽然python在很多情况下可以自行检测输入数据的编码格式并进行相应的处理,但有些时候还是会有问题。如果能够确定输入的中文数据是哪种编码(通常最多见的就是utf8),那么最好是将python内部默认编码改成这种编码。
查看python系统编码:
import sys
print sys.getdefaultencoding()
修改python系统编码:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
(一定要有reload(), 否则会报错:找不到该方法)
0 0
- Python mysqldb 操作mysql出现中文乱码问题
- 【Python】Mysql中文乱码问题与MySQLdb对Mysql操作类的改进
- python mysqldb 查询数据,中文乱码问题
- python操作mysql中文乱码问题
- python django MySQLdb 连接 mysql 5.5 中文乱码问题的解决
- Python:MySQLdb读出MYSQL中的中文为乱码
- python MySQLdb中文乱码解决
- Python调用MySQLdb插入中文乱码的问题
- Python调用MySQLdb插入中文乱码的问题
- python使用MySQLdb写数据库时中文乱码问题
- Python操作中出现中文乱码等问题
- mybatis操作mysql数据库中文出现乱码的问题
- mysql出现中文乱码问题
- python读MySQL数据库出现中文乱码问题
- python 操作mysql 中文乱码
- Python操作MySQL以及中文乱码的问题
- Python操作MySQL以及中文乱码的问题
- Python操作MySQL以及中文乱码的问题
- HDFS源码解析(一)
- .NET程序在windows操作系统上独立运行的技术要点
- C++的重载函数定义和用法
- 手机短号
- poj 2528 Mayor's posters (线段树+区间离散)
- Python mysqldb 操作mysql出现中文乱码问题
- android调试时apk可运行,导出签名的apk后闪退,报找不到class
- 【Android】Eclipse换成舒服的黑色背景
- Gradle 入门
- Eclipse各个版本号名字的由来
- 小白github教程
- 我经历过的失败产品和项目(一):序
- 对于AP中为什么有4个WEP KEY的分析
- ViewGroup 实战篇 实现FlowLayout