数据库中文乱码是个比较常见的问题,今天笔者就遇到了。
系统环境:macOS Sierra 10.12.6
MySQL 版本:5.7.18 Homebrew
连接软件:Navicat Premium 12.0.12 TNT edition
1. MySQL程序问题
1 | #启动 |
与客户端(网页或软件:web/终端/数据库管理工具)有关的:
- character_set_client:对客户端的请求字符串进行编码
- character_set_connection:连接服务器时的默认编码,例如navicat连接阿里云服务器
- character_set_results:表示客户端想以哪种编码接收查询结果
如果后两个没有特别指定,则默认和character_set_client是一样的
与服务器端(增删查改命令)有关的:
- character_set_server:服务器编码
- character_set_database:创建数据库时的默认编码
如果后一个没有特别指定,则默认和character_set_server是一样的
其他:
- character_set_filesystem:以二进制文件进行设置,不影响字符显示
- character_set_system:用于mysql存储标识符,一直是UTF8,也不影响字符显示
因此如果字符编码有异常,我们只需要在my.cnf中对character_set_client与character_set_server进行设置就ok了。
1 | 默认路径下,配置文件加载的先后顺序 |
但是我的系统是通过 homebrew
安装的 MySQL,默认情况下没有 my.cnf
文件。
1 | cd /etc && touch my.cnf |
使用 vi
编辑器将下面内容写入 /etc/my.cnf
。
1 | [client] |
保存退出,然后停止 MySQL(mysql.server stop
),并重新启动 MySQL(mysql.server start
),并用以下命令校验字符编码信息。
1 | #执行mysql命令 |
2. MySQL 数据库数据问题
如果显示的数据查询结果还是乱码,可能就是之前创建的数据库或数据表有问题了,可以通过以下方式进行检查。
查询数据库支持的所有字符集
1
show character set;或者show char set;
查看mysql服务器当前状态
1
status或者\s
查看数据库编码
1
show create database dbname;
查看数据表编码
1
show create table tablename\G;
查看数据表字段编码
1
show full columns from tablename;
如果发现编码不是 UTF-8
,请重新创建相应的数据库
/数据表
/字段
。
3. Mac终端-iTerm2软件设置
这一种情况比较少见,就是Mac终端不支持显示中文,这样也会导致乱码。
一方面对终端软件如iterm2的软件偏好设置进行修改为utf-8。
另一方面就是在终端执行以下语句:
1 | LANG='zh_CN.UTF-8'; |
4. MySQL 管理工具—Navicat 软件设置
笔者这次遇到的问题就属于最后一种,前面的数据库配置,查看的编码都是正确的,并且使用程序查询出来的也没有乱码,偏偏 Navicat 显示数据表时中文便乱码了,那么请新建mysql服务器连接,Encoding那一栏不要选择默认的 UTF-8,选择Auto即可正常显示中文。
5. 参考
Mac系统解决MySQL乱码问题