MySQL 8.4 发行说明
示例 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 变音字母”)。
示例 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 |
+------+这不是 bug,而是 latin1_german1_ci 和 utf8mb4_unicode_ci 排序属性的结果(显示的排序是根据德语 DIN 5007 标准进行的)。