文档主页
MySQL 9.0 参考手册
相关文档 下载此手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  排序规则的影响示例

12.8.6 排序规则的影响示例

示例 1:对德语变音字母进行排序

假设表 T 中的列 X 具有以下 latin1 列值

Muffler
Müller
MX Systems
MySQL

假设这些列值是使用以下语句检索的

SELECT X FROM T ORDER BY X COLLATE collation_name;

下表显示了使用 ORDER BY 和不同排序规则时值的排序结果。

latin1_swedish_ci latin1_german1_ci latin1_german2_ci
Muffler Muffler Müller
MX Systems Müller Muffler
Müller MX Systems MX Systems
MySQL MySQL MySQL

在本示例中导致排序顺序不同的字符是 ü(德语 U-umlaut)。

  • 第一列显示了使用瑞典/芬兰排序规则的 SELECT 结果,该规则指出 U-umlaut 与 Y 排序在一起。

  • 第二列显示了使用德语 DIN-1 规则的 SELECT 结果,该规则指出 U-umlaut 与 U 排序在一起。

  • 第三列显示了使用德语 DIN-2 规则的 SELECT 结果,该规则指出 U-umlaut 与 UE 排序在一起。

示例 2:搜索德语变音字母

假设您有三个表,它们之间的唯一区别在于使用的字符集和排序规则

mysql> SET NAMES utf8mb4;
mysql> CREATE TABLE german1 (
         c CHAR(10)
       ) CHARACTER SET latin1 COLLATE latin1_german1_ci;
mysql> CREATE TABLE german2 (
         c CHAR(10)
       ) CHARACTER SET latin1 COLLATE latin1_german2_ci;
mysql> CREATE TABLE germanutf8 (
         c CHAR(10)
       ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

每个表包含两条记录

mysql> INSERT INTO german1 VALUES ('Bar'), ('Bär');
mysql> INSERT INTO german2 VALUES ('Bar'), ('Bär');
mysql> INSERT INTO germanutf8 VALUES ('Bar'), ('Bär');

上面提到的排序规则中有两个有 A = Ä 相等性,而另一个没有此相等性 (latin1_german2_ci)。因此,比较会产生以下结果

mysql> SELECT * FROM german1 WHERE c = 'Bär';
+------+
| c    |
+------+
| Bar  |
| Bär  |
+------+
mysql> SELECT * FROM german2 WHERE c = 'Bär';
+------+
| c    |
+------+
| Bär  |
+------+
mysql> SELECT * FROM germanutf8 WHERE c = 'Bär';
+------+
| c    |
+------+
| Bar  |
| Bär  |
+------+

这不是错误,而是 latin1_german1_ciutf8mb4_unicode_ci 排序属性的结果(显示的排序是根据德语 DIN 5007 标准进行的)。