MySQL生僻字插入失败的处理方法(Incorrect string value)

 更新时间:2017年05月13日 21:34:08   作者:菜鸡  
最近,业务方反馈有个别用户信息插入失败,报错提示类似Incorrect string value:"\xF0\xA5 .....看这个提示应该是字符集不支持某个生僻字造成的,需要的朋友可以参考下

最近,业务方反馈有个别用户信息插入失败,报错提示类似"Incorrect string value:"\xF0\xA5 ..... " 看这个提示应该是字符集不支持某个生僻字造成的。

下面是在虚拟机里复现的场景:

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模拟):

1、先模拟线上环境,设置下字符集:

wKiom1kUGECCXdKDAAAV9L1hpEY173.png

2、插入生僻字(生僻字可以参考:http://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=kzb&ks=24E20&js=257E3)

wKioL1kUGEHCtaAvAABxJXp_7Ow741.png

我们尝试插入王(在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 --quiet --charset=utf8mb4 --dry-run
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 --quiet --charset=utf8mb4 --execute

step4、再次插入实验:

1、先设置下字符集:

wKiom1kUGECCXdKDAAAV9L1hpEY173.png

2、再次插入,可以看到插入成功了。

wKioL1kUGILTLvpxAAAdWKxKR5A899.png

在命令行里面查询也是没有乱码了:

wKiom1kUGIPyeykFAAAiRzDqNxs956.png

到此就完成了,大家可以参考一下。

相关文章

  • MySQL 回表,覆盖索引,索引下推

    MySQL 回表,覆盖索引,索引下推

    这篇文章主要介绍了MySQL 回表,覆盖索引,索引下推,就是我们需要查询的数据都在二级索引树中,直接返回这种情况就叫做覆盖索引
    2022-07-07
  • mysql中TIMESTAMPDIFF案例详解

    mysql中TIMESTAMPDIFF案例详解

    这篇文章主要介绍了mysql中TIMESTAMPDIFF案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 以mysql为例详解ToplingDB 的 UintIndex

    以mysql为例详解ToplingDB 的 UintIndex

    本文主要介绍了以mysql为例详解ToplingDB的UintIndex,在ToplingDB的CO-Index(Compressed Ordered Index)家族中,Nest Succinct Trie是最通用的,更多相关内容需要的朋友可以参考一下
    2022-08-08
  • Mysql如何实现不存在则插入,存在则更新

    Mysql如何实现不存在则插入,存在则更新

    这篇文章主要介绍了Mysql如何实现不存在则插入,存在则更新,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • MySQL表排序规则不同错误问题分析

    MySQL表排序规则不同错误问题分析

    这篇文章主要介绍了MySQL表排序规则不同错误问题分析,小编觉得挺不错的,这里分享给大家,供各位参考。
    2017-10-10
  • MySQL中CHAR和VARCHAR类型演变和详解

    MySQL中CHAR和VARCHAR类型演变和详解

    MySQL数据库的varchar类型在5.0.3以下的版本中的最大长度限制为255,其数据范围可以是0~255
    2012-06-06
  • MYSQL如何查询成绩为前5名的学生

    MYSQL如何查询成绩为前5名的学生

    这篇文章主要介绍了MYSQL如何查询成绩为前5名的学生问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 详解MySQL和Redis如何保证数据一致性

    详解MySQL和Redis如何保证数据一致性

    MySQL与Redis都是常用的数据存储和缓存系统,为了提高应用程序的性能和可伸缩性,很多应用程序将MySQL和Redis一起使用,其中MySQL作为主要的持久存储,而Redis作为主要的缓存,那么本文就给大家介绍一下MySQL和Redis如何保证数据一致性,需要的朋友可以参考下
    2023-08-08
  • 在CentOS上安装phpMyAdmin的教程

    在CentOS上安装phpMyAdmin的教程

    这篇文章主要介绍了在CentOS上安装phpMyAdmin的教程,phpMyAdmin是一款借助PHP脚本来操作MySQL的工具,非常具有人气,需要的朋友可以参考下
    2015-06-06
  • 集群运维自动化工具ansible使用playbook安装mysql

    集群运维自动化工具ansible使用playbook安装mysql

    本文主要介绍了如何使用playbook安装mysql,需要的朋友可以参考下
    2014-07-07

最新评论