当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改。以下备注批量修改方案( 以修改为 utf8mb4_bin 为例,注意将
db_name
换为真实的数据库名 )。
1. 修改数据库编码及字符集
这一步比较简单,直接执行即可:
alter database db_name character set = utf8mb4 collate = utf8mb4_general_ci;
查看表编码格式及字段编码格式
show create table table1;
show full columns from table1;
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 = 'exhibition'
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 文件执行即可。
Q.E.D.