【问题标题】:Difference between database, table, column collation数据库、表、列排序规则的区别
【发布时间】:2014-08-12 21:54:27
【问题描述】:

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

谢谢。

【问题讨论】:

  • SELECT 'e' = 'é' 应该返回什么?没有可参考的表格,就必须有一些“更高”的排序规则,对吧?
  • 不要忘记服务器排序规则,它在服务器和客户端之间的连接握手期间设置(或使用默认值)。

标签: mysql database mariadb collation


【解决方案1】:

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

优先顺序,最高为最低优先:

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

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

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

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

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

column collat​​ion 使用表的 collat​​ion 作为其默认值,如果没有设置 collat​​ion,它会沿着链查找要使用的 collat​​ion,如果所有的 collat​​ion 都停止在服务器上其他没有设置。

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

另请参阅手册页Character Set Support

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 您的回答也很好,谢谢,但我标记了另一个,因为它提供了我认为有用的更多信息。谢谢!
    • 如果我更改表的排序规则,它会更新所有列排序规则(如果未指定)吗?
    • 不。继承仅在创建时应用。如果您修改表,那么新列将获得新的排序规则,但旧列将保持原样。
    猜你喜欢
    • 2019-11-17
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 2018-02-11
    • 2015-02-10
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    相关资源
    最近更新 更多