表结构
CREATE TABLE `t1` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(40) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL DEFAULT '',
`count` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3907957 DEFAULT CHARSET=latin1 '
需求:name列改为utf8mb4
操作:“alter table t1 modify name varchar(40) CHARACTER SET utf8mb4 NOT NULL DEFAULT ‘’”
讲解:utf8mb4 默认的collate 是utf8mb4_general_ci,并且name列是唯一索引,改表的时候写新表__t1_new,把重复(其实是大小写的,跟pt-osc改唯一索引的时候扔掉重复数据一样)的给扔掉了。业务补数据也无法写入,修改表的collate为utf8mb4_bin之后业务补数据解决。
解决:alter table t1 modify name varchar(40) binary CHARACTER SET utf8mb4 NOT NULL DEFAULT ‘’