【问题标题】:How to modify mariadb chartset at once?如何一次修改 mariadb 图表集?
【发布时间】:2017-09-12 16:08:15
【问题描述】:

我正在使用 mariadb 和 Spring、JdbcTemplate 进行开发。

起初,我们将 DB 字符集设置为 utf8,但现在我们必须将其更改为 utf8mb4,因为 emojis。

到目前为止,我使用如下查询更新单个字符集。

ALTER TABLE WT_WORKS CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE WT_WORKS CHANGE WORKS_TITLE WORKS_TITLE VARCHAR(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE WT_WORKS CHANGE WORKS_DESC WORKS_DESC VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

但是,由于表关系,它现在很有效。例如当我插入WT_WORKS时,也需要插入WT_WRITERS。看起来不可能找到每个表和列。

所以我想立即更改这些。(包括ProceduresFunctions)。 -- 类似(v_name VARCHAR(10)) 变成(v_name VARCHAR(10) CHARSET utf8mb4)

感谢您的回答。

仅供参考。我的my.cnf 得到了关注设置

[client]
default-character-set=utf8mb4

[mysqld]
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4

[client]
default-character-set = utf8mb4

【问题讨论】:

    标签: mysql utf-8 character-encoding emoji utf8mb4


    【解决方案1】:
    SELECT  DISTINCT TABLE_SCHEMA, TABLE_NAME
        FROM  information_schema.COLUMNS
        WHERE  CHARACTER_SET_NAME = 'utf8'
    

    将列出所有仍将某些列设置为 utf8 的表。当他们,做ALTER TABLE .. CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;

    这应该会生成您需要的所有ALTERs

    SELECT  DISTINCT
            CONCAT(
                "ALTER TABLE ", TABLE_SCHEMA, ".", TABLE_NAME,
                "  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;"
                  )
        FROM  information_schema.COLUMNS
        WHERE  CHARACTER_SET_NAME = 'utf8'
    

    然后将它们复制并粘贴到mysql命令行工具中。

    警告:如果您有一些列的字符集不是 utf8,它们将被盲目地转换为 utf8mb4。这对 hex、ascii 等列不利,例如 country_codeuuidmd5 等。

    您可以执行类似的操作来更改单个列。

    你不需要两者都做。

    【讨论】:

    • 它看起来不能只用一个查询来修复。不过还是谢谢。
    • 是的。一个查询会生成一个包含许多 ALTERs 的列表,然后需要运行它。
    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 2012-01-01
    相关资源
    最近更新 更多