问题背景
在实际生产过程中,会遇到各种各样的乱码问题。针对这些乱码问题,进行汇总归类。
相关原理
关于变量
MySQL中涉及字符集相关的变量一共有8个。
【1】 | character_set_client | 客户端 |
【2】 | character_set_connection | |
【3】 | character_set_database | |
【4】 | character_set_filesystem | |
【5】 | character_set_results | |
【6】 | character_set_server | |
【7】 | character_set_system | |
【8】 | character_sets_dir |
以下参数值是由客户端每次连接进来设置的,和服务器端没关系
- 【1】character_set_client
- 【2】character_set_connection
- 【5】character_set_results
关于制定字符集的方式
客户端有两种方式指定字符集,一种在进入Session后指定字符集,另外一种是在客户端发起连接的时候制定字符集。
1. 在会话中指定字符集
我们登陆进mysql后,执行 set names utf8 后; 实际就是同时修改上面的这3个参数值的
MariaDB [(none)]> set names utf8;
Query OK, 0 rows affected (0.00 sec)
执行命令后就是修改了这3个参数
2. 发起会话的时候制定字符集
如果想要告诉server端指定的字符集,在client端在发起连接的时候添加 --default-character-set=xxx
mysql -pxxx --default-character-set=latin1 -e "show variables like '%char%';"
如果上述不起作用的话,像如下这样。
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
这时候需要修改server端的配置文件了
cat /etc/my.cnf.d/client.cnf
[client]
default-character-set = utf8mb4