让你清晰理解字符集和排序规则数据库教程7:理解数据库中

这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战

Collation:排序规则

Character Set:字符集Character Encoding:字符编码 / Character Encoding Set:字符编码集

编码字符集和排序规则的清晰解释

字符集(Character Set)是一组符号和编码。排序规则(Collation)是一组用于比较字符集中字符的规则。

下面是一个虚构的字符集的例子,用来说明字符集和排序规则:

假设我们有一个包含四个字母的字母表: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。刚刚做的就是对我们的字符集应用排序规则。这个排序规则是一组规则(在当前示例下只有一个规则):“比较编码”。我们称这种最简单的排序规则为二进制排序规则(binary collation

但是,如果想说小写字母和大写字母是等价的呢?

那么至少有两条规则:(1)将小写字母 a 和 b 视为等价于 A 和 B; (2) 然后比较编码。这就是不区分大小写或大小写不敏感的排序规则(case-insensitive collation。它比二进制排序规则稍微复杂一些。

在现实生活中,大多数字符集都有许多字符或符号:不仅仅是 A 和 B,尤其是全世界范围内的语言和符号,和许多特殊符号、标点符号。

同样在现实生活中,大多数排序规则都有很多规则,不仅是区分字母大小写,还包括是否区分重音(“重音”(accent)是附加在字符上的标记,如德语 Ö),以及多字符映射(例如在两个德语排序规则之一中 Ö = OE 的规则)。

数据库系统中对字符集和排序规则的处理

因此,数据库系统中需要实现对不同字符集和不同排序规则的支持及处理。以应对多种不同的地区语言环境和字符文本内容。

RDBMS需要处理的有:

  • 支持使用多种字符集存储字符文本。
  • 支持使用多种排序规则比较字符文本。
  • 支持在同一个服务器、同一个数据库甚至同一个表中混合使用不同字符集或排序规则的字符文本。
  • 支持在数据库系统、数据库、表、列等级别上,指定字符集和排序规则的规范。

以及其它与字符编码和排序规则相关的功能和操作。

通常RDBMS使用默认的字符集和排序规则即可,实际使用中也很少会变更。不同的数据库系统对字符集编码和排序规则的支持也不相同,需要各自了解相关的官方支持。

但是对于RDBMS中,可用的字符集和排序规则、及如何改变默认设置、如何在数据库、表、列和查询中使用等,都应该有一定了解。

不同的字符集和排序规则会产生不同的使用影响。比如字符文本比较、操作和函数的行为,索引和物理数据的存储处理等。


以上,主要翻译参考自Character Sets and Collations in General