MySQL的校对规则,你必须要知道。
在 MySQL 中,可以使用 CREATE DATABASE 语句创建数据库,语法格式如下:
CREATE DATABASE [IF NOT EXISTS] <数据库名>
[[DEFAULT] CHARACTER SET <字符集名>]
[[DEFAULT] COLLATE <校对规则名>];
MySQL 的字符集(CHARACTER)和校对规则(COLLATION)是两个不同的概念。字符集是用来定义 MySQL 存储字符串的方式,校对规则定义了比较字符串的方式。
也把校对规则称为排序规则、或对比规则。
二、COLLATE校对规则
对于MySQL中那些字符类型的列,如VARCHAR
,CHAR
,TEXT
类型的列,都需要有一个COLLATE
类型来告知MySQL如何对该列进行排序和比较。
COLLATE会影响到ORDER BY语句的顺序,会影响到WHERE条件中大于小于号筛选出来的结果,会影响DISTINCT、GROUP BY、HAVING语句的查询结果。
另外,MySQL建索引的时候,如果索引列是字符类型,也会影响索引创建,总之,凡是涉及到字符类型比较或排序的地方,都会和COLLATE有关。
2.1 各种COLLATE的区别
COLLATE
通常是和数据编码(CHARSET
)相关的,一般来说每种CHARSET
都有多种它所支持的COLLATE
,并且每种CHARSET
都指定一种COLLATE
为默认值。例如Latin1
编码的默认COLLATE
为latin1_swedish_ci
,GBK
编码的默认COLLATE
为gbk_chinese_ci
,utf8mb4
编码的默认值为utf8mb4_general_ci
。
很多COLLATE
都带有_ci
字样,这是Case Insensitive的缩写,即大小写无关,也就是说"A"和"a"在排序和比较的时候是一视同仁的。selection * from table1 where field1="a"
同样可以把field1为"A"的值选出来。与此同时,对于那些_cs
后缀的COLLATE
,则是Case Sensitive,即大小写敏感的。
2.2 查询collation
在MySQL中使用show collation
指令可以查看到MySQL所支持的所有COLLATE
。以utf8和utf8mb4为例,该编码所支持的所有COLLATE如下图所示。
show collation;
-- 只查询utf8的collation
show collation like '%utf8%';
点“在看”变好看噢