Mysql中文乱码问题非常常见,网上搜到的解决方法也各种各样,都是给出一堆设置参数,就号称可以解决所有乱码问题,但不少童鞋照着做却不能解决问题,偶也深有感触,今天拿出时间仔细研究了一下mysql字符集,从原理上给大家解惑,让大家再见到中文乱码问题能够迅速确定问题在哪,迅速解决。
mysql数据库字符集有以下五个设置级别:服务器级、数据库级、表级、列级和连接级,
1)服务器级默认是latin1,可在mysql配置文件[mysqld]节点下通过default-character-set=utf8设置;(mysql 5.5配置 character-set-server=utf8)
2)数据库级默认继承服务器级,可在创建数据库时指定:create database yp default character set utf8;
3)表级默认继承数据库级,可在建表时指定:create table `t1` (`id` integer) DEFAULT CHARSET=utf8;
4)列级默认继承表级,可在建表时指定:create table t1 (col1 VARCHAR(5)
CHARACTER SET utf8);
5)连接级是指定客户端连接时的字符集,mysql客户端命令可在配置文件[client]节点设置:default-character-set=utf8,其他应用连接时可各自具体设置,不过一般不需要自行设置,如django或php这类的连接默认都是utf8字符。
字符集设置的优先级:4>3>2>1>5,中文乱码问题按照这几个级别去检查,很快即可找到问题所在。
1)首先查看表级和列级字符集:show create table table_name;
如果有设置,检查字符集是否正确,如果错误需重新建表。
如果没有明确设置请检查下一个级别。
2)show create database db_name;
如果有设置,检查字符集是否正确,如果错误请更改数据库字符集,同时请重新建表(重要)
如果没有设置请检查下一个级别。
3)show variables like 'character_set%';
检查character_set_server是否正确,如果错误请更改,同时更改数据库字符集(重要),重新建表(重要)。
如果到此时都没有问题,那就是你的连接问题了,请设置你的连接字符集,使其能正确表示中文。
阅读(1427) | 评论(0) | 转发(0) |