Mac系统解决MySQL乱码问题

  • 更新时间:2年零261天前
  • 浏览量:1469
  • 发布人:思过崖

系统环境
homebrew 0.9.5
mac 10.11.1
mysql 5.6.26

一、mysql程序问题

  1. #启动
  2. mysql.server start
  3. #关闭
  4. mysql.server stop
  5. #执行mysql命令
  6. mysql;
  7. #查看编码设置[下面显示的是已经设置好的]
  8. mysql> show variables like '%char%';
  9. +--------------------------+---------------------------------
  10. | Variable_name | Value
  11. +--------------------------+---------------------------------
  12. | character_set_client | utf8 |
  13. | character_set_connection | utf8 |
  14. | character_set_database | utf8 |
  15. | character_set_filesystem | binary |
  16. | character_set_results | utf8 |
  17. | character_set_server | utf8 |
  18. | character_set_system | utf8 |
  19. | character_sets_dir | /usr/local/Cellar/mysql/5.6.26/share/mysql/charsets/ |
  20. +--------------------------+---------------------------------

(1)与客户端(网页或软件:web/终端/数据库管理工具)有关的:

  • character_set_client:对客户端的请求字符串进行编码
  • character_set_connection:连接服务器时的默认编码,例如navicat连接阿里云服务器
  • character_set_results:表示客户端想以哪种编码接收查询结果

如果后两个没有特别指定,则默认和character_set_client是一样的

(2)与服务器端(增删查改命令)有关的:

  • character_set_server:服务器编码
  • character_set_database:创建数据库时的默认编码

如果后一个没有特别指定,则默认和character_set_server是一样的

(3)其他:

  • character_set_filesystem:以二进制文件进行设置,不影响字符显示
  • character_set_system:用于mysql存储标识符,一直是UTF8,也不影响字符显示

官方文档: http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_character_set_system

因此如果字符编码有异常,我们只需要在my.cnf中对character_set_client与character_set_server进行设置就ok了

  1. #默认路径下,配置文件加载的先后顺序
  2. /etc/my.cnf
  3. /etc/mysql/my.cnf
  4. /usr/local/etc/my.cnf
  5. ~/.my.cnf

查找my.cnf文件

  1. zqq@mypcdeMacBook-Pro ~ locate my.cnf
  2. /usr/local/Cellar/mysql/5.6.26/my.cnf
  3. /usr/local/Cellar/mysql/5.6.26/mysql-test/include/default_my.cnf
  4. /usr/local/Cellar/mysql/5.6.26/mysql-test/suite/federated/my.cnf
  5. /usr/local/Cellar/mysql/5.6.26/mysql-test/suite/ndb/my.cnf
  6. /usr/local/Cellar/mysql/5.6.26/mysql-test/suite/ndb_big/my.cnf
  7. /usr/local/Cellar/mysql/5.6.26/mysql-test/suite/ndb_binlog/my.cnf
  8. /usr/local/Cellar/mysql/5.6.26/mysql-test/suite/ndb_rpl/my.cnf
  9. /usr/local/Cellar/mysql/5.6.26/mysql-test/suite/ndb_team/my.cnf
  10. /usr/local/Cellar/mysql/5.6.26/mysql-test/suite/rpl/extension/bhs/my.cnf
  11. /usr/local/Cellar/mysql/5.6.26/mysql-test/suite/rpl/my.cnf
  12. /usr/local/Cellar/mysql/5.6.26/mysql-test/suite/rpl_ndb/my.cnf

通过搜索我们发现mysql的安装路径下有my.cnf文件,但这并不在默认的加载路径上,因此

  1. cd /etc && touch my.cnf;

将以下内容写入进/etc/my.cnf

  1. [client]
  2. default-character-set=utf8
  3. [mysqld]
  4. character-set-server=utf8

保存退出,然后mysql.server stop && mysql.server start就ok了,重新执行以下代码进行检验

  1. #执行mysql命令
  2. mysql;
  3. #查看编码设置[下面显示的是已经设置好的]
  4. mysql> show variables like '%char%';

二、mysql数据库数据问题

如果显示的数据查询结果还是乱码,可能就是之前创建的数据库或数据表有问题了,可以通过以下方式进行检查

(1)查询数据库支持的所有字符集

  1. show character set;或者show char set;

(2)查看mysql服务器当前状态

  1. status或者\s

(3)查看数据库编码

  1. show create database dbname;

(4)查看数据表编码

  1. show create table tablename\G;

(5)查看数据表字段编码

  1. show full columns from tablename;

如果有问题,请重新创建相应的数据库/数据表/字段;

三、Mac终端-iterm2软件设置

还有一种情况比较少见,就是Mac终端不支持显示中文,这样也会导致乱码
一方面对终端软件如iterm2的软件偏好设置进行修改为utf-8;
另一方面就是在终端执行以下语句

  1. LANG='zh_CN.UTF-8';
  2. export $LANG;

原谅我还没有找到永久设置LANG变量的配置文件在哪

四、MySQL管理工具—navicat软件设置

如果万事俱备,偏偏navicat显示数据表时又出现了问题,那么请新建mysql服务器连接,Encoding那一栏不要选择utf8,选择默认的Auto即可