当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改。以下备注批量修改方案( 以修改为 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;

其中,table1table6 即为数据库中的所有数据表。

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

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

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

Q.E.D.