MySQL 8.0 参考手册  / 第 10 章字符集、排序规则、Unicode  /  10.2 MySQL 中的字符集和排序规则

10.2 MySQL 中的字符集和排序规则

MySQL Server 支持多种字符集。要显示可用的字符集,请使用 INFORMATION_SCHEMA CHARACTER_SETS表或 SHOW CHARACTER SET语句。部分清单如下。有关更完整的信息,请参阅 第 10.10 节,“支持的字符集和排序规则”

mysql> SHOW CHARACTER SET;
+----------+---------------------------------+---------------------+--------+
| Charset  | Description                     | Default collation   | Maxlen |
+----------+---------------------------------+---------------------+--------+
| big5     | Big5 Traditional Chinese        | big5_chinese_ci     |      2 |
...
| latin1   | cp1252 West European            | latin1_swedish_ci   |      1 |
| latin2   | ISO 8859-2 Central European     | latin2_general_ci   |      1 |
...
| utf8     | UTF-8 Unicode                   | utf8_general_ci     |      3 |
| ucs2     | UCS-2 Unicode                   | ucs2_general_ci     |      2 |
...
| utf8mb4  | UTF-8 Unicode                   | utf8mb4_general_ci  |      4 |
...
| binary   | Binary pseudo charset           | binary              |      1 |
...

默认情况下,该SHOW CHARACTER SET 语句显示所有可用的字符集。它采用一个可选的LIKEor WHERE子句来指示要匹配的字符集名称。例如:

mysql> SHOW CHARACTER SET LIKE 'latin%';
+---------+-----------------------------+-------------------+--------+
| Charset | Description                 | Default collation | Maxlen |
+---------+-----------------------------+-------------------+--------+
| latin1  | cp1252 West European        | latin1_swedish_ci |      1 |
| latin2  | ISO 8859-2 Central European | latin2_general_ci |      1 |
| latin5  | ISO 8859-9 Turkish          | latin5_turkish_ci |      1 |
| latin7  | ISO 8859-13 Baltic          | latin7_general_ci |      1 |
+---------+-----------------------------+-------------------+--------+

一个给定的字符集总是至少有一个排序规则,而大多数字符集有多个。要列出字符集的显示归类,请使用INFORMATION_SCHEMA COLLATIONS表或 SHOW COLLATION语句。

默认情况下,该SHOW COLLATION 语句显示所有可用的排序规则。它采用一个可选的 LIKEorWHERE 子句来指示要显示的排序规则名称。例如,要查看默认字符集 latin1(cp1252 West European) 的归类,请使用以下语句:

mysql> SHOW COLLATION WHERE Charset = 'latin1';
+-------------------+---------+----+---------+----------+---------+
| Collation         | Charset | Id | Default | Compiled | Sortlen |
+-------------------+---------+----+---------+----------+---------+
| latin1_german1_ci | latin1  |  5 |         | Yes      |       1 |
| latin1_swedish_ci | latin1  |  8 | Yes     | Yes      |       1 |
| latin1_danish_ci  | latin1  | 15 |         | Yes      |       1 |
| latin1_german2_ci | latin1  | 31 |         | Yes      |       2 |
| latin1_bin        | latin1  | 47 |         | Yes      |       1 |
| latin1_general_ci | latin1  | 48 |         | Yes      |       1 |
| latin1_general_cs | latin1  | 49 |         | Yes      |       1 |
| latin1_spanish_ci | latin1  | 94 |         | Yes      |       1 |
+-------------------+---------+----+---------+----------+---------+

排序规则具有以下latin1含义。

校对 意义
latin1_bin 二进制根据latin1编码
latin1_danish_ci 丹麦语/挪威语
latin1_general_ci 多语言(西欧)
latin1_general_cs 多语言(ISO 西欧),区分大小写
latin1_german1_ci 德语 DIN-1(字典顺序)
latin1_german2_ci 德国 DIN-2(电话簿顺序)
latin1_spanish_ci 现代西班牙语
latin1_swedish_ci 瑞典语/芬兰语

排序规则具有以下一般特征:

  • 两个不同的字符集不能具有相同的排序规则。

  • 每个字符集都有一个默认排序规则。例如, and 的默认排序规则 latin1分别utf8latin1_swedish_ciand utf8_general_ci。该 INFORMATION_SCHEMA CHARACTER_SETS表和 SHOW CHARACTER SET语句指示每个字符集的默认排序规则。表 INFORMATION_SCHEMA COLLATIONSSHOW COLLATION语句有一列指示每个排序规则是否是其字符集的默认值(Yes如果是,则为空)。

  • 归类名称以与其关联的字符集的名称开头,通常后跟一个或多个表示其他归类特征的后缀。有关命名约定的其他信息,请参阅 第 10.3.1 节,“排序规则命名约定”

当一个字符集有多个排序规则时,可能不清楚哪种排序规则最适合给定的应用程序。为避免选择不合适的归类,请与代表性数据值进行一些比较,以确保给定的归类按照您期望的方式对值进行排序。