MySQL⽣僻字插⼊失败的处理⽅法(Incorrectstringvalue)
最近,业务⽅反馈有个别⽤户信息插⼊失败,报错提⽰类似"Incorrect string value:" F0 A5 ..... " 看这个提⽰应该是字符集不⽀持某个⽣僻字造成的。
下⾯是在虚拟机⾥复现的场景:
step1、模拟原始表结构字符集环境:
use test;
CREATE TABLE `t1` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`real_name` varchar(255) CHARACTER SET utf8 DEFAULT '' COMMENT '姓名',
`nick` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '昵称',
PRIMARY KEY (`id`)
)
ENGINE=InnoDBAUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会员卡';
step2、插⼊⽣僻字(使⽤sqlyog模拟):
安装mysql失败1、先模拟线上环境,设置下字符集:
我们尝试插⼊王(在word⾥⾯按住alt,输⼊152964)。可以看到插⼊失败了。
step3、修改real_name的字符集:
use test;
alter table t1 change real_name real_name varchar(255) CHARACTER SET utf8mb4 DEFAULT '' COMMENT '姓名' ;
如果是线上⼤表的话,可以使⽤pt-osc来处理,命令如下:
pt-online-schema-change -uroot -h localhost --alter=" change real_name real_name varchar(255) CHARACTER SET utf8mb4 DEFAULT '' COMMENT '姓名' " D=test, t=t1 --no-check-replication-filters --alter-foreign-keys-method=auto --recursion-method=none --qu pt-online-schema-change -uroot -h localhost --alter=" change real_name real_name varchar(255) CHARACTER SET utf8mb4 DEFAULT '' COMMENT '姓名' " D=test, t=t1 --no-check-replication-filters --alter-foreign-keys-method=auto --recursion-method=none --qu step4、再次插⼊实验:
1、先设置下字符集:
2、再次插⼊,可以看到插⼊成功了。
在命令⾏⾥⾯查询也是没有乱码了:
到此就完成了,⼤家可以参考⼀下。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论