【问题标题】:How to change the default collation of a table?如何更改表的默认排序规则?
【发布时间】:2010-10-19 00:54:13
【问题描述】:
create table check2(f1 varchar(20),f2 varchar(20));

使用默认排序规则 latin1_general_ci 创建一个表;

alter table check2 collate latin1_general_cs;
show full columns from check2;

将列的单独排序规则显示为“latin1_general_ci”。

那么alter table命令的作用是什么?

【问题讨论】:

  • Change database collation的可能重复
  • 您可能希望更改正确答案,因为我自己和许多其他人似乎都同意第二个是正确的。

标签: mysql sql collation


【解决方案1】:

它为表格设置默认排序规则;如果您创建一个新列,则应与 latin_general_ci 进行整理——我认为。尝试为单个列指定排序规则,看看是否有效。 MySQL 在处理这个问题的方式上有一些非常奇怪的行为。

【讨论】:

    【解决方案2】:

    MySQL 有 4 级排序规则:服务器、数据库、表、列。 如果更改服务器、数据库或表的排序规则,则不会更改每列的设置,而是更改默认排序规则。

    例如,如果您更改数据库的默认排序规则,您在该数据库中创建的每个新表都将使用该排序规则,如果您更改表的默认排序规则,您在该表中创建的每一列都将使用该排序规则。

    【讨论】:

    • 其实MySQL有FIVE级别的排序规则,有一个字符集级别的默认排序规则设置被很多人忘记了。
    • 还有连接排序规则show variables like "collation%";,所以总数是SIX
    【解决方案3】:

    更改表的默认字符集和排序规则包括现有列的排序规则(注意 convert to 子句):

    alter table <some_table> convert to character set utf8mb4 collate utf8mb4_unicode_ci;
    

    编辑了答案,感谢一些cmets的提示:

    应该避免推荐utf8。它几乎从来都不是你想要的,而且经常会导致意想不到的混乱。 utf8 字符集与 UTF-8 不完全兼容。如果你想要 UTF-8,你想要 utf8mb4 字符集。 – Rich Remer 2018 年 3 月 28 日 23:41

    这似乎很重要,很高兴我阅读了 cmets 并感谢 @RichRemer。 Nikki,我认为你应该在你的答案中编辑它,考虑到有多少浏览量。请参阅此处https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8.html 和此处What is the difference between utf8mb4 and utf8 charsets in MySQL? – Paulpro 3 月 12 日 17:46

    【讨论】:

    • 更改默认字符集有什么影响?它是否更新现有数据,因此需要遍历表并进行更新、锁定等?
    • utf8_bin 更好,不是吗? utf8_binutf8_unicode_ci 有什么区别?
    • 这只是我使用的一个例子。区别在于utf8_bin 区分大小写,utf8_unicode_ci 不区分大小写。一种不一定比另一种更好——使用适合您需要的任何一种。
    • @JasomDotnet 你现在应该使用 utf8mb4_unicode_ci stackoverflow.com/questions/766809/…
    • 应该避免推荐utf8。它几乎从来都不是你想要的,而且经常会导致意想不到的混乱。 utf8 字符集与 UTF-8 不完全兼容。如果你想要 UTF-8,utf8mb4 字符集就是你想要的。
    【解决方案4】:

    可能不仅需要更改 SCHEMA 表

    ALTER SCHEMA `<database name>`  DEFAULT CHARACTER SET utf8mb4  DEFAULT COLLATE utf8mb4_unicode_ci ;
    

    正如 Rich 所说 - utf8mb4

    (mariaDB 10)

    【讨论】:

    • &lt;database name&gt; 而不是 &lt;table name&gt;
    • 查看我对已接受答案的评论,为什么您不应该推荐utf8,而是推荐utf8mb4
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 2010-11-10
    • 2012-03-27
    • 2018-12-19
    • 2023-03-22
    • 2011-02-19
    相关资源
    最近更新 更多