MySQL 8.4 Release Notes
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”)。
示例 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_ci
和utf8mb4_unicode_ci
(按照德国DIN 5007标准进行排序)的排序性质的结果。