# 10.8.6 整理效果示例

示例 1:对德语变音符号进行排序

假设该列X在表中有这些拉丁语1列值:

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
围巾 围巾 穆勒
MX 系统 穆勒 围巾
穆勒 MX 系统 MX 系统
MySQL MySQL MySQL

在此示例中导致不同排序顺序的字符是 U,上面有两个点 (ü),德国人称之为“U-umlaut”。

  • 第一列显示的结果选择使用瑞典/芬兰整理规则,即 U-umlaut 与 Y 排序。

  • 第二列显示了结果选择使用德国 DIN-1 规则,即 U-umlaut 与 U 排序。

  • 第三列显示结果选择使用德国 DIN-2 规则,即 U-umlaut 与 UE 排序。

示例 2:搜索德语变音符号

假设您有三个表,它们的区别仅在于所使用的字符集和排序规则:

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;

每个表包含两条记录:

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 标准进行的)。