mysql - 如何一次性修改mariadb图表集?

标签 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)

感谢您的回答。

仅供引用。我的 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;

这应该生成您需要的所有ALTER:

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 等。

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

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

关于mysql - 如何一次性修改mariadb图表集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43444723/

相关文章:

python - 在我的 python 文件中写入 utf-8 字符串

OpenCV putText UTF-8 字符

Java PreparedStatement UTF-8字符问题

c# - 在 C# 中的自定义代码表中将阿拉伯语转换为十六进制的最佳方法

mysql - 在MySQL中将2个不同的表合并为1个

MySQL SELECT on 2 SELECT 结果是否可能

gcc - 是否可以让 GCC 使用 BOM 源文件编译 UTF-8?

encoding - dompdf特殊字符显示问号?

javascript - Php 删除函数 javascript/redirect

php - $query -> 从用户处获取所有 'friends',有效,但每个 friend 都会获得两倍