如何一次修改mariadb chartset?

How to modify mariadb chartset at once?

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

一开始我们把DB charset设为utf8,现在因为emojis的原因不得不改成utf8mb4

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

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;

但是由于table关系,现在效率很高了。例如当我插入WT_WORKS时,还需要插入WT_WRITERS。似乎不可能找到每个 table 和列。

所以我想知道立即更改这些。(包括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
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。这对十六进制、ascii 等列是不利的,例如 country_codeuuidmd5

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

你不需要两者都做。