字符集 是一组符号和编码。 排序规则 是一组用于比较字符集中字符的规则。让我们用一个虚构字符集的例子来明确区分。
假设我们有一个包含四个字母的字母表:A
、B
、a
、b
。我们给每个字母一个数字:A
= 0,B
= 1,a
= 2,b
= 3。字母 A
是一个符号,数字 0 是 A
的 编码,所有四个字母及其编码的组合是一个 字符集。
假设我们要比较两个字符串值,A
和 B
。最简单的方法是查看编码:A
为 0,B
为 1。因为 0 小于 1,所以我们说 A
小于 B
。我们刚才所做的就是对我们的字符集应用了排序规则。排序规则是一组规则(在本例中只有一条规则):“比较编码。” 我们将这种最简单的排序规则称为 二进制 排序规则。
但是,如果我们想说小写字母和大写字母是等效的呢?那么我们至少有两条规则:(1) 将小写字母 a
和 b
视为等效于 A
和 B
;(2) 然后比较编码。我们称之为 不区分大小写 的排序规则。它比二进制排序规则稍微复杂一点。
在现实生活中,大多数字符集都有许多字符:不仅有 A
和 B
,还有整个字母表,有时是多个字母表或具有数千个字符的东方书写系统,以及许多特殊符号和标点符号。同样在现实生活中,大多数排序规则都有很多规则,不仅是关于是否区分字母大小写,还包括是否区分重音符号(“重音符号”是附加到字符上的标记,如德语中的 Ö
),以及多字符映射(例如在两种德语排序规则中,Ö
= OE
的规则)。
MySQL 可以为您做这些事情
使用各种字符集存储字符串。
使用各种排序规则比较字符串。
在同一台服务器、同一个数据库甚至同一张表中混合使用具有不同字符集或排序规则的字符串。
允许在任何级别指定字符集和排序规则。
要有效地使用这些功能,您必须了解哪些字符集和排序规则可用、如何更改默认值,以及它们如何影响字符串运算符和函数的行为。