一个 字符集 是一组符号和编码。一个 排序规则 是一组比较字符集中的字符的规则。让我们通过一个虚拟字符集的例子来明确这个区别。
假设我们有一个四个字母的字母表: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 可以为您做这些事情:
-
使用多种字符集存储字符串。
-
使用多种排序规则比较字符串。
-
在同一个服务器、同一个数据库或甚至同一个表中混合使用不同字符集或排序规则的字符串。
-
在任何级别上启用字符集和排序规则的指定。
要有效地使用这些功能,您必须知道可用的字符集和排序规则是如何更改默认值的,以及它们如何影响字符串操作符和函数的行为。