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

时间:2014-06-22 21:53:18

标签: mysql database collation

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

非常感谢。

2 个答案:

答案 0 :(得分:21)

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

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

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

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

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

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

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

列排序规则使用表格的排序规则作为默认设置,如果没有排序规则设置,则会跟进链条以查找要使用的排序规则,如果所有其他排序规则都不在,则停在服务器上# 39; t set。

使用CASTCONVERT在查询中指定查询排序规则,否则将使用链中的下一个可用排序规则。除非你使用一个函数,否则无法设置它。

另请参阅手册页Character Set Support

答案 1 :(得分:2)

简而言之。设置服务器排序规则时。到UTF-8。在未定义排序规则的情况下创建的所有数据库都将从Server继承。

column iherits from table
table inherits from database
database inherits from server

但是,您可以在其中一个点覆盖默认服务器。然后一切都将继承。