使用pt-osc改表(修改字符集)丢数据

本文详细阐述了如何将表`t1`的`name`列从ucs2编码转换为utf8mb4,同时处理唯一索引下大小写敏感问题。通过创建新表`t1_new`并丢弃重复数据,以及调整collate为utf8mb4_bin以支持业务补数据,确保了数据的一致性和可写性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

表结构

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 ‘’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值