MySQL 字符集:排序规则问题

来自Wikioe
跳到导航 跳到搜索


在 SQL 语句中使用“COLLATE”

使用“COLLATE”子句,您可以覆盖默认的默认排序规则以进行比较。“COLLATE”可用于 SQL 语句的各个部分。这里有些例子:

  1. 使用“ORDER BY”:【对中文排序呢???拼音升降序使用什么排序规则???】
    SELECT k
    FROM t1
    ORDER BY k COLLATE latin1_german2_ci;'''
    
  2. 使用“AS”:
    SELECT k COLLATE latin1_german2_ci AS k1
    FROM t1
    ORDER BY k1;
    
  3. 使用“GROUP BY”:
    SELECT k
    FROM t1
    GROUP BY k COLLATE latin1_german2_ci;
    
  4. 具有聚合功能:
    SELECT MAX(k COLLATE latin1_german2_ci)
    FROM t1;
    
  5. 使用“DISTINCT”:
    SELECT DISTINCT k COLLATE latin1_german2_ci
    FROM t1;
    
  6. 使用“WHERE”:
    SELECT *
         FROM t1
         WHERE _latin1 'Müller' COLLATE latin1_german2_ci = k;
    
    SELECT *
         FROM t1
         WHERE k LIKE _latin1 'Müller' COLLATE latin1_german2_ci;
    
  7. 使用“HAVING”:
    SELECT k
    FROM t1
    GROUP BY k
    HAVING k = _latin1 'Müller' COLLATE latin1_german2_ci;
    

“COLLATE”子句优先级

COLLATE子句具有较高的优先级(高于“||”),因此以下两个表达式是等效的:

x || y COLLATE z
x || (y COLLATE z)

【???有啥用】

字符集和排序规则兼容性

每个字符集都有一个或多个排序规则,但是每个排序规则都与一个且只有一个字符集相关联。因此,以下语句会导致错误消息,因为 latin2_bin 排序规则与 latin1 字符集不合法:

mysql> SELECT _latin1 'x' COLLATE latin2_bin;
ERROR 1253 (42000): COLLATION 'latin2_bin' is not valid
for CHARACTER SET 'latin1'

表达式中的排序规则强制性

与_bin 排序规则相比的二进制排序规则

排序规则效果的示例

在“INFORMATION_SCHEMA”搜索中使用排序规则