是否可以通过修改转储的.sql文件将mysql表从utf8迁移到utf8mb4?

时间:2015-12-09 13:31:02

标签: mysql utf-8 mysqldump utf8mb4

假设有2个mysql数据库 - src_db具有utf8编码并且有几个现有表,dst_db具有utf8mb4编码并且是新创建的。以下步骤是否会成功将utf8中的src_db个表移至utf8mb4中的dst_db表?

首先,从src_db转储。

mysqldump src_db -uxxx -pyyy > tbls.sql

然后在sql文件中搜索并替换所有出现的utf8 utf8mb4

sed -i 's/DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci/DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci/g' tbls.sql
sed -i 's/COLLATE utf8_unicode_ci/COLLATE utf8mb4_unicode_ci/g' tbls.sql
sed -i 's/character_set_client = utf8/character_set_client = utf8mb4/g' tbls.sql
sed -i 's/SET NAMES utf8/SET NAMES utf8mb4/g' tbls.sql

然后,手动修改varchar列上的任何索引,以仅索引列的前缀。请参阅下面的示例。唯一的修改是在索引定义中添加(191)

CREATE TABLE `tbl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `col` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  KEY `index_tbl_on_col` (`col`(191)),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

最后,将sql文件导入dst_db

mysql dst_db -uxxx -pyyy < tbls.sql

导入dst_db的所有表都是有效的utf8mb4表吗?

0 个答案:

没有答案