校验效果的示例
示例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_ciand 的分类属性的结果utf8_unicode_ci(显示的分类是根据德国DIN 5007标准进行的)。
