Documentation Home

10.8.6 整理效果示例

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

假设表中的列X具有 T这些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
围巾 围巾 米勒
MX系统 米勒 围巾
米勒 MX系统 MX系统
MySQL MySQL MySQL

导致此示例中不同排序顺序的字符是ü(德语 U-umlaut)。

  • 第一列显示了 SELECT使用瑞典语/芬兰语整理规则的结果,它表示 U-umlaut 与 Y 排序。

  • 第二列显示 SELECT使用德国 DIN-1 规则的结果,该规则表示 U-umlaut 与 U 排序。

  • 第三列显示了 SELECT使用德国 DIN-2 规则的结果,该规则表示 U-umlaut 与 UE 排序。

示例 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  |
+------+

这不是错误,而是 和 的排序属性的结果latin1_german1_ciutf8mb4_unicode_ci显示的排序是根据德国 DIN 5007 标准完成的)。