10.8.6 整理效果的示例
范例 1:对德国乌姆勒人进行分类
假设 tableT
中的列X
具有以下latin1
列值:
Muffler
Müller
MX Systems
MySQL
还假设使用以下语句检索列值:
SELECT X FROM T ORDER BY X COLLATE collation_name;
下 table 显示了如果我们使用具有不同排序规则的ORDER BY
,则值的结果 Sequences。
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 |
在此示例中,导致不同排序 Sequences 的字符是 U,上面有两个点(ü
),德国人称其为“ U-umlaut”。
-
第一列使用瑞典语/芬兰语整理规则显示SELECT的结果,该规则 table 示 U-umlaut 与 Y 进行排序。
-
第二列显示使用德国 DIN-1 规则的SELECT的结果,该规则 table 示 U-umlaut 用 U 排序。
-
第三列显示使用德国 DIN-2 规则的SELECT的结果,该规则 table 示 U-umlaut 与 UE 进行排序。
范例 2:搜寻德国乌姆劳人
假设您有三个 table,它们的区别仅在于所使用的字符集和排序规则:
mysql> SET NAMES utf8;
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 utf8 COLLATE utf8_unicode_ci;
每个 table 包含两个记录:
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
和utf8_unicode_ci
的排序属性的结果(显示的排序是根据德国 DIN 5007 标准进行的)。