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”。

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

首页