我正在开发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
。看起来不可能找到每个表格和列。
所以我想知道一次更改这些内容。(包括Procedures
和Functions
)。 - 类似(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
答案 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_code
,uuid
,md5
等。
您可以执行类似更改单个列的操作。
您无需同时执行这两项操作。