如何立即修改mariadb chartset?

时间:2017-04-17 03:29:37

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

我正在开发mariadb和Spring,JdbcTemplate。

首先,我们将DB字符集设为utf8,但现在由于表情符号,我们必须将其更改为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;

然而,由于表格关系,现在效率很高。例如,当我插入WT_WORKS时,还需要进入WT_WRITERS。看起来不可能找到每个表格和列。

所以我想知道一次更改这些内容。(包括ProceduresFunctions)。 - 类似(v_name VARCHAR(10))(v_name VARCHAR(10) CHARSET utf8mb4)

感谢您的回答。

FYI。我的my.cnf获得了以下设置

[client]
default-character-set=utf8mb4

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

[client]
default-character-set = utf8mb4

1 个答案:

答案 0 :(得分:0)

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之外的charsets列,它们将被盲目转换为utf8mb4。这对于hex,ascii等列来说会很糟糕,例如country_codeuuidmd5等。

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

您无需同时执行这两项操作。