1、查看mysql有关字符编码设置
mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
2、参数释义
3、参数作用范围解释
数据库、表、列字段字符集的由来
建库时,若未明确指定字符集,则采用character_set_server指定的字符集
建表时,若未明确指定字符集,则采用当前库所采用的字符集
新增、修改表字段时,若未明确指定字符集,则采用当前表所采用的字符集
更新、查询涉及到得字符集变量
更新流程,字符集转换过程:character_set_client-->character_set_connection-->表字段字符集
查询流程,字符集转换过程:表字段字符集-->character_set_result
character_set_database
当前默认数据库的字符集。比如:执行use xxdb;后,当前数据库变为xxdb,若xxdb的字符集为utf8,那么此变量值就变为utf8(供系统设置,无需人工设置)
4、字符编码转换原理
MySQL Server收到请求时将请求数据从 character_set_client 转换为 character_set_connection,进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,步骤如下
使用每个数据字段的 CHARACTER SET 设定值;
若上述值不存在,则使用对应数据表的字符集设定值;
若上述值不存在,则使用对应数据库的字符集设定值;
若上述值不存在,则使用 character_set_server 设定值。
最后将操作结果从内部操作字符集转换为 character_set_results