• 首页
  • css3教程
  • html5教程
  • jQuery手册
  • vue手册
  • php手册
  • MySQL手册
  • apache手册
  • redis手册
  • 校验效果的示例

    示例1:对德国Umlauts进行校验

    假设XT中的latin1列具有以下列值:

    Muffler
    Müller
    MX Systems
    MySQL
    

    还假设使用以下语句检索列值:

    SELECT X FROM T ORDER BY X COLLATE collation_name;
    

    下表显示了如果我们使用ORDER BY不同的归类,则值的结果顺序。

    latin1_swedish_cilatin1_german1_cilatin1_german2_ci
    MufflerMufflerMüller
    MX SystemsMüllerMuffler
    MüllerMX SystemsMX Systems
    MySQLMySQLMySQL

    在此示例中,导致不同校验顺序的字符是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 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_ciand 的分类属性的结果utf8_unicode_ci(显示的分类是根据德国DIN 5007标准进行的)。