【问题标题】:Collation change utf8mb4_unicode_ci to utf8mb4_general_ci排序规则将 utf8mb4_unicode_ci 更改为 utf8mb4_general_ci
【发布时间】:2020-11-20 21:19:54
【问题描述】:

对于我的数据库,我使用 utf8mb4_unicode_ciutf8mb4 作为默认字符集。这是一个错误,使用我创建的数据库的人抱怨排序规则。我需要将其转换为utf8mb4_general_ci。我是否能够只使用更改语句更改数据库,例如:

ALTER DATABASE `#{database}` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

或者,即使两个排序规则之间的字符集相同,我是否需要更改每个单独的表并处理列?我似乎无法找到明确的答案......我正在使用 MySQL 5.7.2x 。

【问题讨论】:

    标签: mysql database collation utf8mb4


    【解决方案1】:

    utf8mb4_unicode_520_ci 比你提到的任何一个排序规则都要好。

    他们为什么抱怨?也许JOINs 没有使用索引。我会和他们争论应该改变旧表。

    ALTER DATABASE 只为将来的表设置默认值。它不会做你需要的。

    每个表都需要ALTER TABLE ... CONVERT TO ...。有关类似的ALTER,请参阅http://mysql.rjweb.org/doc.php/limits#767_limit_in_innodb_indexes。它提供了一种自动生成所有ALTERs的方法。

    【讨论】:

    • 如果没有人连接到数据库,这看起来安全吗? - SET FOREIGN_KEY_CHECKS = 0 ,ALTER TABLE #{table} CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci , SET FOREIGN_KEY_CHECKS = 1 用于 DB 中每个 BASE TABLES 的表?
    猜你喜欢
    • 2016-08-18
    • 2017-10-17
    • 2020-08-28
    • 2018-12-19
    • 2015-07-07
    • 2018-06-10
    • 1970-01-01
    相关资源
    最近更新 更多