MySQL乱码与字符集
MySQL 乱码 与 字符集
MySQL 安装后默认的字符集是 latin1,这样在处理中文时容易出现乱码问题,所以需要改为 utf8。
注:我的MySQL版本是5.6.*。
用语句 show variables like ‘character%’; 查看MySQL当前的字符集设置(也可以使用命令 status查看):
mysql> show variables like 'character%';
+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.03 sec)
从结果可以看出,MySQL字符集涉及到:
客户端使用的字符集:character_set_client
客户端域服务器之间的连接使用的字符集:character_set_connection
数据库实例使用的字符集:character_set_database
MySQL服务器使用的字符集:character_set_serve
这些字符集都可以在配置文件 my.cnf 里配置,增加如下配置:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8 # 修改后要重启MySQL服务。
对于已创建的数据库实例的编码,可以用语句 alert database blog character set utf8; 修改。
对于已登录的会话,可以用语句 set names utf8; 来修改当前会话的字符集,它会把 character_set_client,character_set_connection,character_set_results 修改为 utf8编码,只对当前会话有效,每次登录要重新设置。
如果创建表的时候没有指定字符编码,也是 latin1的,且表里的数据也这样,这时就需要把表结构和数据分别用 latin1 编码导出来,再把表的创建语句里指定为 utf8,同时把数据的 sql 文件也改为 utf8,可以在本地的文本编辑器里修改,然后再把数据重新导入。
原文地址: http://coderbee.net/index.php/db/20140112/709