校验效果的示例
示例1:对德国Umlauts进行校验
假设X
表T
中的latin1
列具有以下列值:
Muffler Müller MX Systems MySQL
还假设使用以下语句检索列值:
SELECT XFROM TORDER BY XCOLLATE collation_name;
下表显示了如果我们使用ORDER BY
不同的归类,则值的结果顺序。
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 |
在此示例中,导致不同校验顺序的字符是U,上方带有两个点(ü
),德国人称其为“ U-umlaut”。”
- 第一列显示
SELECT
使用瑞典语/芬兰语校验规则的结果,该规则表示U-umlaut与Y进行校验。 - 第二列显示
SELECT
使用德国DIN-1规则的结果,该规则表示U-umlaut与U进行校验。 - 第三列显示
SELECT
使用德国DIN-2规则的结果,该规则表示U-umlaut与UE进行校验。
示例2:搜索德国Umlauts
假设您有三个表,它们的区别仅在于所使用的字符集和校验规则:
mysql>SET NAMES utf8; mysql>CREATE TABLE german1 ( c CHAR(10) )CHARACTER SET latin1COLLATE latin1_german1_ci; mysql>CREATE TABLE german2 ( c CHAR(10) )CHARACTER SET latin1COLLATE latin1_german2_ci; mysql>CREATE TABLE germanutf8 ( c CHAR(10) )CHARACTER SET utf8COLLATE utf8_unicode_ci;
每个表包含两个记录:
mysql>INSERT INTO german1VALUES ('Bar'), ('Bär'); mysql>INSERT INTO german2VALUES ('Bar'), ('Bär'); mysql>INSERT INTO germanutf8VALUES ('Bar'), ('Bär');
上述校验规则中的两个具有A =Ä
相等,而没有一个等于(latin1_german2_ci
)。因此,您将通过比较获得以下结果:
mysql>SELECT *FROM german1WHERE c = 'Bär'; +------ + | c | +------ + | Bar | | Bär | +------ + mysql>SELECT *FROM german2WHERE c = 'Bär'; +------ + | c | +------ + | Bär | +------ + mysql>SELECT *FROM germanutf8WHERE c = 'Bär'; +------ + | c | +------ + | Bar | | Bär | +------ +
这不是错误,而是latin1_german1_ci
and 的分类属性的结果utf8_unicode_ci
(显示的分类是根据德国DIN 5007标准进行的)。