如何一次修改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 和列。
所以我想知道立即更改这些。(包括Procedures
和Functions
)。 -- 类似于 (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_code
、uuid
、md5
等
您可以执行类似的操作来更改个别列。
你不需要两者都做。
我正在使用 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 和列。
所以我想知道立即更改这些。(包括Procedures
和Functions
)。 -- 类似于 (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_code
、uuid
、md5
等
您可以执行类似的操作来更改个别列。
你不需要两者都做。