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
,可以在本地的文本编辑器里修改,然后再把数据重新导入。
欢迎关注我的微信公众号: coderbee笔记,可以更及时回复你的讨论。