我知道排序规则(collations)是一组用于字符集比较的规则。MySQL/MariaDB除了列排序规则外,还有表和数据库排序规则。我想知道这三种(数据库、表和列)排序规则之间的区别。
谢谢。
谢谢。
MySQL的字符集和排序规则可以被解释为一个自上而下的优先级列表。最上面的是最低优先级,最下面的是最高优先级。
按照优先级从高到低的顺序如下:
CAST
或 CONVERT
)服务器排序规则 是由服务器设置的,它在 my.cnf
中或者在构建服务器源代码时设置。默认情况下,这通常是 latin1
或者 utf8
,具体取决于您使用的平台。
连接特定的排序规则 是由客户端使用类似 SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';
的查询来设置。大多数客户端不会设置连接特定的排序规则,所以服务器将使用其自己的默认设置,如上所述。
数据库排序规则 在创建数据库时设置,或者稍后手动更新。如果您没有指定排序规则,它将使用更高级别的排序规则,这可能是连接特定的或服务器排序规则。
表格排序规则 与数据库排序规则相同,除非留空,它将使用数据库作为其默认值,然后是连接特定的,最后是服务器的排序规则。
列排序规则 使用表格的排序规则作为其默认值,如果没有设置排序规则,则沿着链条查找要使用的排序规则,直到找到服务器为止。
查询排序规则 是通过使用 CAST
或 CONVERT
在查询中指定的,否则将使用链条中下一个可用的排序规则。除非使用函数,否则无法设置这个。
请同时参考手册页面字符集支持。
column iherits from table
table inherits from database
database inherits from server
然而,在这些点之一,您可以覆盖默认服务器。那么,所有内容都将从它继承。
SELECT 'e' = 'é'
应该返回 0,因为这两个字符不相等。在没有表格作为参考的情况下,必须有一定的“更高级”的排序规则。 - Niet the Dark Absol