如何批量修改MySQL数据表编码及字符集为utf8mb4?

摘要:utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。 采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。 更改数据库的编码为utf8mb4: 1. MySQL的版本 ut
utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。 采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。 更改数据库的编码为utf8mb4: 1. MySQL的版本 utf8mb4的最低mysql版本支持版本为5.5.3+,若不是,请升级到较新版本。 2. MySQL驱动 utf8mb4编码最低版本是5.1.34可用,低于5.1.13版本不能使用 3.查看配置 注:建议直接使命令连接数据库,最好不要使Navicat等具连接,不然查出的结果不准确。 SHOW VARIABLES WHERE VARIABLE_NAME LIKE 'character_set_%' OR VARIABLE_NAME LIKE 'collation%'; 通过以上命令查看变量值,查询结果如下 通过结果,虽然collation_connection 、collation_database 、collation_server是什么没关系。 但必须保证以下几个变量必须是utf8mb4。 character_set_client (客户端来源数据使用的字符集) character_set_connection (连接层字符集) character_set_database (当前选中数据库的默认字符集) character_set_results (查询结果字符集) character_set_server (默认的内部操作字符集) 4.修改MySQL配置文件 修改mysql配置文件my.cnf(windows 是 my.ini),找到后请在以下三部分里添加如下内容: [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_bin init_connect='SET NAMES utf8mb4' 配置完成之后,重启数据库,检查变量,再次执行命令,可以看到变量值已修改 SHOW VARIABLES WHERE VARIABLE_NAME LIKE 'character_set_%' OR VARIABLE_NAME LIKE 'collation%'; 5. 数据库连接的配置 数据库连接参数中: characterEncoding=utf8会被自动识别为utf8mb4,也可以不加这个参数,会自动检测。 而autoReconnect=true是必须加上的。 6. 将数据库和已经建好的表也转换成utf8mb4 6.1 修改数据库编码 ALTER DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 6.2 修改表编码 执行以下的SQL,把数据库名改为自己的数据库名称,执行后的结果集就是修改编码和字符集的SQL, 然后复制出来,批量执行就好了。 SELECT CONCAT("ALTER TABLE `", TABLE_NAME,"` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;") AS target_tables FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA="数据库表名" AND TABLE_TYPE="BASE TABLE" 警告:数据库中数据量比较大时,不建议这样做,因为会很卡。 6.3 修改列的编码 执行以下的SQL,把数据库名改为自己的数据库名称,执行后的结果集就是修改列编码和字符集的SQL, 然后复制出来,批量执行就好了。
阅读全文