MySQL 批量修改数据表编码及字符集

博客介绍了 MySQL 数据库编码及字符集的修改方法。首先说明了修改数据库编码及字符集可直接执行操作;接着阐述修改数据表与表中字段的编码及字符集需两步,先生成可执行 SQL 列表,再粘贴执行,还提及数据表多的情况可导出到文件执行。
当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改。以下备注批量修改方案( 以修改为 utf8mb4_bin 为例,注意将  db_name 换为真实的数据库名 )。

1. 修改数据库编码及字符集

这一步比较简单,直接执行即可:

ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;

2. 修改数据表与表中字段的编码及字符集

这里需要两步。

首先,需要利用语句,生成所有实际执行的语句:

SELECT 
CONCAT("ALTER TABLE `", TABLE_NAME,"` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;") 
AS target_tables
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA="db_name"
AND TABLE_TYPE="BASE TABLE"

此语句会基于 MySQL 的元数据表,得到一组可直接执行的 SQL 列表,如下:

ALTER TABLE `table1` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ALTER TABLE `table2` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ALTER TABLE `table3` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ALTER TABLE `table4` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ALTER TABLE `table5` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ALTER TABLE `table6` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

其中,table1 到 table6 即为数据库中的所有数据表。

然后,直接将语句粘贴并执行即可。

注意,这里使用 CONVERT TO 而非 DEFAULT,是因为后者不会修改表中字段的编码和字符集。

此外,对于数据表比较多的数据库,可以先将第一步的执行结果导出到 .sql 文件,再通过该 SQL 文件执行即可。

参考链接

  1. mysql - Difference between database, table, column collation - Stack Overflow
  2. automation - Alter charset and collation in all columns in all tables in MySQL - Server Fault
  3. character encoding - How to convert an entire MySQL database characterset and collation to UTF-8? - Stack Overflow
  4. mysql - How to convert all tables in database to one collation? - Stack Overflow
  5. How to easily convert utf8 tables to utf8mb4 in MySQL 5.5 - Database Administrators Stack Exchange
  6. MySQL case insensitive select - Stack Overflow
  7. Character Set and Collation Overview - MariaDB Knowledge Base
修改 MySQL 表的字符集通常使用 `ALTER TABLE` 命令。以下是常用的命令和操作方式: ### 修改字符集的基本语法 ```sql ALTER TABLE table_name CONVERT TO CHARACTER SET charset_name; ``` 其中,`table_name` 是要修改的表名,`charset_name` 是目标字符集,例如 `utf8` 或 `utf8mb4`。 此命令会将表中的所有列转换为目标字符集,并重新编码数据。如果某些列定义了特定的字符集(如 `latin1`),则需要单独调整这些列的字符集设置 [^3]。 ### 示例:将表字符集从 latin1 转换为 utf8 假设有一个表名为 `users`,希望将其字符集从 `latin1` 更改为 `utf8`: ```sql ALTER TABLE users CONVERT TO CHARACTER SET utf8; ``` ### 批量修改数据库中所有表的字符集 可以通过查询 `information_schema` 生成批量修改语句。例如,将当前数据库的所有表字符集更改为 `utf8`: ```sql SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8;') FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = DATABASE() ORDER BY TABLE_NAME; ``` 执行该查询后,会生成一系列 `ALTER TABLE` 语句,复制并执行即可完成批量修改 [^4]。 ### 注意事项 - **锁表现象**:`CONVERT TO CHARACTER SET` 命令在执行过程中会对表加锁,可能导致性能问题或阻塞其他操作。建议在低峰期执行,或者使用支持无锁变更的工具(如 DMS)进行操作 [^3]。 - **字符集兼容性**:确保原始数据与目标字符集兼容,避免出现乱码问题。例如,`latin1` 编码的数据转换到 `utf8` 时可能不会自动处理特殊字符,需提前验证 [^2]。 - **测试环境验证**:在正式环境中执行前,务必在测试环境中进行充分的验证,以确保数据完整性和应用兼容性 [^3]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值