概念说明
1、字符集(Character Set)
定义了字符和二进制的对应关系,为字符分配了唯一的编号。
2、字符编码(Character Encoding)
字集码,规定了字符的编号存储到计算机中。如:ASCII、IOS-8859-1、GB2312、GBK,既表示了字符集又表示了对应的字符编码。
3、校对规则(Collation)
也可称为排序规则,在同一个字符集内字符之间的比较规则,字符集和校对规则是一对多的关系,每个字符集都有一个默认的校对规则,字符集和校对规则相辅相成,相互依赖关联。
4、总结
字符集定义了MySQL存储字符串的方式,校对规则定义了MySQL比较字符串的方式。
字符集(Character Set)
1、查询支持的字符集以及默认的校对规则
show character set;
2、查询当前MySQL使用的字符集
show variables like '%character%'
3、MySQL字符编码转换原理
①MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection。
②进行内部操作前将请求数据从character_set_connection转换为内部操作字符集。
校对规则(Collation)
1、查询支付的校对规则
show collation;
2、查询当前MySQL使用的校对规则
show variables like '%character%';
3、校对规则特征
①两个不同的字符集不能有相同的校对规则。
②每个字符集有一个默认校对规则。
③存在校对规则命名约定:以其相关的字符集名开始,中间包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束。
4、说明总结
系统使用utf8字符集,若使用utf8_bin校对规则执行SQL查询时区分大小写,使用utf8_general_ci不区分大小写(默认的utf8字符集对应的校对规则是utf8_general_ci)。
实战常用
1、创建数据库指定编码及校对规则
create database demo1 character set=gbk collate=gbk_bin;
2、创建表指定编码及校对规则
create table demo2(
id int,
name varchar(20)
)
character set=gbk,collate=gbk_bin;
3、创建表字段指定编码及校对规则
create table demo3(
id int,
name varchar(20),
email varchar(100) collate gbk_bin,
mobile varchar(100) collate utf8mb4_unicode_ci
)
character set=gbk,collate=gbk_bin;