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_cilatin1_german1_cilatin1_german2_ci
MufflerMufflerMüller
MX SystemsMüllerMuffler
MüllerMX SystemsMX Systems
MySQLMySQLMySQL

在此示例中,导致不同排序 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_ciutf8_unicode_ci的排序属性的结果(显示的排序是根据德国 DIN 5007 标准进行的)。