字符集 是一组符号和编码。 排序规则 是一组用于比较字符集中字符的规则。让我们用一个假想的字符集示例来阐明它们之间的区别。
假设我们有一个包含四个字母的字母表: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 可以为您做到这些
使用各种字符集存储字符串。
使用各种排序规则比较字符串。
在同一服务器、同一数据库甚至同一表中混合使用具有不同字符集或排序规则的字符串。
允许在任何级别指定字符集和排序规则。
要有效地使用这些功能,您必须了解哪些字符集和排序规则可用、如何更改默认值,以及它们如何影响字符串运算符和函数的行为。