数据库,表,列排序规则之间的区别

Oma*_*ari 13 mysql database collation

我知道排序规则是一组用于对字符集进行比较的规则.除了列排序规则之外,MySQL还具有表和数据库排序规则.我想知道这三个(数据库,表和列)的排序规则之间有什么区别.

非常感谢.

Car*_*ett 23

MySQL的字符集和排序规则可以解释为优先级项目的自上而下的列表.最顶层的是最低优先级,最底层是最优先级.

最高优先级最低优先顺序:

  • 服务器整理
  • 特定于连接的排序规则
  • 数据库整理
  • 表整理
  • 列整理
  • 查询整理(使用CASTCONVERT)

服务器排序规则由服务器设置,服务器设置在服务器内部my.cnf或从源代码构建服务器时.默认情况下,这通常是latin1utf8,取决于您的平台.

特定于连接的排序规则由客户端使用类似的查询设置SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';.大多数客户端不设置特定于连接的排序规则,因此服务器将使用其自己的默认值,如上所述.

数据库排序规则在数据库创建期间设置,或稍后通过更新手动设置.如果您未指定一个,它将使用下一个更高级别的排序规则,该排序规则可以是特定于连接的排序规则,也可以是服务器排序规则.

表排序规则与数据库排序规则相同,除非留空,它将使用数据库作为其默认值,然后使用特定于连接的,然后最终使用服务器的排序规则.

列排序规则使用表的排序规则作为其默认值,如果没有排序规则集,则它将跟踪链以查找要使用的排序规则,如果未设置所有其他排序规则,则停在服务器上.

查询排序规则在查询中使用CAST或指定CONVERT,但否则将使用链中的下一个可用排序规则.除非使用函数,否则无法设置此项.

另请参阅手册页字符集支持.


Grz*_*orz 5

简而言之。当您设置服务器排序规则时。为 UTF-8。所有未定义排序规则而创建的数据库都将从服务器继承它。

column iherits from table
table inherits from database
database inherits from server
Run Code Online (Sandbox Code Playgroud)

但是,您可以在其中之一覆盖默认服务器。那么一切都会继承它。