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