一、mysql字符集
查看数据库支持的字符集和校对规则
show character set;
charset 列标识支持的字符集
collation 列表示支持的校对规则
查询数据库的字符集和校对规则
show variables like '%character%';
show variables like '%collation%';
服务端设置默认字符集和校对规则:(校对规则与字符集默认匹配,每个字符集都有默认的校对规则)
1、编译数据库的时候指定字符集
2、mysql启动服务时通过设置字符参数 mysqld_safe --character_set_server=utf8mb4 &
3、在my.cnf 中指定数据库字符参数 character_set_server=utf8mb4
4、在mysql运行服务期间修改 set global character_set_server=utf8mb4;
二、连接时字符集及转换
mysql>show variables like 'chara%'; +--------------------------+----------------------------------+ | 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/local/mysql/share/charsets/ | |
+--------------------------+----------------------------------+
连接客户端字符集:character_set_client
客户端发出sql语句,由character_set_client 变量指定
服务端接收到语句后,会转换成character_set_connection 变量设置的字符集
服务端执行完语句后,会按照character_set_results 变量设置的字符集返回结果
character_set_client --------> character_set_connection ----------> character_set_results
mysql Server收到请求时将请求数据从 character_set_client 转换为 character_set_connection
进行内部操作前将请求数据从 character_set_connection 转换为内部操作字符集,步骤如下
A. 使用每个数据字段的 CHARACTER SET 设定值;
B. 若上述值不存在,则使用对应数据表的字符集设定值
C. 若上述值不存在,则使用对应数据库的字符集设定值;
D. 若上述值不存在,则使用 character_set_server 设定值。
最后将操作结果从内部操作字符集转换为 character_set_results
三、保存时字符集及转换
保存数据通过4种不同的粒度,指定存储的字符集
server 全局
database 数据库级
table 表级
column 列级
优先级:列>表>数据库>全局
继承关系:列继承表,表继承数据库,数据库继承全局
create database dd charset gbk;
create table t1(id int) charset utf8;
create table t2(id int ,name varchar(20) charset utf8mb4);
show create database dd;
show create table t1/t2;
客户端、服务器端
只有连接和存储两个层面字符保存一致,才显示正常
字符集和超集直接的关系
超集包括子集,但如果连接和插入的字符集不一致,插入的时候就乱码,后续使用存储一致的字符集查询也是乱码 。尽量保持一致。
标签:编码,set,utf8mb4,character,show,字符集,mysql From: https://blog.51cto.com/u_15575266/6025892