MySQL 8.4 Release Notes
12.1 字符集和排序规则概述
一个字符集是一个符号和编码的集合。一个排序规则是对字符集中的字符比较的规则。让我们用一个虚构的字符集来做个示例。
假设我们有一个四个字母的字母表:A
,B
,a
,b
。我们给每个字母分配一个数字:A
= 0,B
= 1,a
= 2,b
= 3。字母A是一个符号,数字0是A的编码,而四个字母和它们的编码组成一个字符集。
假设我们想比较两个字符串值:A
和 B
。最简单的方法是查看编码:0 对于 A
,1 对于 B
。因为 0 小于 1,我们说 A
小于 B
。我们刚刚做的就是对字符集应用一个排序规则。这个排序规则是一个规则(在这里只有一个):“比较编码。”我们称这个最简单的所有可能排序规则为二进制 排序规则。
但是,如果我们想说小写字母和大写字母是等价的?那么我们至少需要两个规则:(1)将小写字母a
和b
视为A
和B
;(2)然后比较编码。我们称这个是不区分大小写排序。这比二进制排序复杂了一点。
在实际生活中,多数字符集都有很多字符:不仅仅是A
和B
,还有整个字母表,有时候多个字母表或东亚写法系统,伴随着许多特殊符号和标点符号。实际生活中,多数排序规则不仅是区分字母大小,还要区分音调(例如德国Ö
),还有多字符映射规则(例如某个德国排序规则将Ö
视为OE
)。
MySQL 可以帮你做这些事情:
-
使用多种字符集存储字符串。
-
使用多种排序规则比较字符串。
-
在同一个服务器、同一个数据库或同一个表中混杂不同字符集或排序规则的字符串。
-
在任何级别指定字符集和排序规则。
要想有效地使用这些功能,你必须知道可用的字符集和排序规则,如何更改默认值,以及它们对字符串操作符和函数行为的影响。