Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Examples of the Effect of Collation

12.8.6 排序规则的示例

示例 1:排序德语umlauts

假设表 T 的列 X 使用 latin1 字符集,具有以下值:

Muffler
Müller
MX Systems
MySQL

假设使用以下语句检索列值:

SELECT X FROM T ORDER BY X COLLATE collation_name;

下面表格显示了使用不同排序规则的值顺序结果。

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 语句,根据德国 DIN-1 规则,U-umlaut 排序与 U。

  • 第三个列显示使用德国 DIN-2 规则的 SELECT 语句,根据德国 DIN-2 规则,U-umlaut 排序与 UE。

示例 2:搜索德语umlauts

假设你有三个表,唯一的区别是字符集和排序规则:

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标准进行排序)的排序性质的结果。