通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 原文:【原创】通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...这篇blog重点在解决问题,如果你对字符编码并不是特别了解,建议先看看 《 【原创】通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 》。
原文: 【原创】通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...

这篇blog重点在解决问题,如果你对字符编码并不是特别了解,建议先看看 【原创】通俗易懂地解决中文乱码问题(1) --- 跨平台乱码

当然,如果只是针对解决这个Mysql插入报错问题,本篇足够了。

 

一、定位错误

 

定位错误绝对是至关重要的一环。我建议遇到问题耐心分析一下比较好,毕竟“不是所有的牛奶都叫特仑苏”。

引起同一个问题的可能有很多,别人的解决方案也许并不适合自己。

那先看看问题出现在哪了,报错如下:

发现的确是编码错误, 16进制的错误提示(\xF0\x9F\x94\xA5\xE5\x8C...)虽然说的比较清楚了但是看看这个字段值是什么也无妨。

看看此时‘event_title’是什么鬼东西,如下:

原来是有一个特殊字符'‘。这个字符的来源是移动端,现在大家聊天不加个表情卖萌还能不能做朋友了?所以移动端大量的新兴字符确实对数据库有了更改的要求。

 

那么再一探究竟,看看这个字符的二进制是什么?如下(第一行):

到这我们基本可以定位这个问题的原因了

1、这个字符占用三个字节。

2、根据上一篇对UTF-8编码方式的介绍,我们知道对于UTF-8三个字节的编码,其格式是 1110xxxx(E0-EF) 10yyyyyy 10zzzzzz。但是这个特殊字符低8位竟然是1111,显然不符合utf-8编码规则,所以mysql不支持写入。(其实这和最开始的错误提示是一致的)

 

二、解决问题

 

问题定位了那么就该想办法解决了,目前无非两条路可选。

1、哎您厉害我怕了还不成吗,所以烦劳您别入库了。因此对应的解决办法就是入库前把错乱字符删除。

2、擦老子武功天下第一,必须见一对拆一对。因此对于的办法就是找找看哪个Mysql的版本能支持了,更新下Mysql的版本。

生活可以任性,但是选择还是需要认真的。所以根据自己实际情况进行选择。但一般选择2的比较少,更新数据库版本的确是个牵扯比较多的问题。

 

解决办法:

对于1解决办法太多了,见仁见智了。我选择用正则表达式来处理这个问题,因为毕竟也不仅仅是这一个字符。

针对我自己的情况我使用的是 "[^,。!《》]&\\pP|\\pZ|\\pS" 这个规则匹配。

 

对于2,我查了下资料发现Mysql 5.6及以上版本扩大了UTF-8的支持力度,并且添加了utf8mb4设置项在相应字段上(感谢幻元素的提醒,担心误导其他人),不过通过我的实验并没有解决这个问题

也许需要在相应字段加上 utf8_general_ci 这项设置。不过这项设置我没有进行测试,如果大家发现Mysql哪个版本和配置能解决这个问题了烦劳留个言哇~

文章最后有这个选项(utf8_general_ci)的一点说明。

 

 

附:utf8_unicode_ci和utf8_general_ci区别(引自wiki)

在数据库系统MySQL中 有多种字符集,其中utf8_unicode_ci和utf8_general_ci是最常用的,但是utf8_general_ci对某些语言的支持有一些小问题,如果可以接受,那最好使用utf8_general_ci,因为它速度快。否则,请使用较为精确的utf8_unicode_ci,不过速度 会慢一些。

 

转载请注明出处,谢谢~   http://www.cnblogs.com/xiaoboCSer/p/4175861.html

 

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4天前
|
关系型数据库 MySQL OLAP
无缝集成 MySQL,解锁秒级 OLAP 分析性能极限,完成任务可领取三合一数据线!
通过 AnalyticDB MySQL 版、DMS、DTS 和 RDS MySQL 版协同工作,解决大规模业务数据统计难题,参与活动完成任务即可领取三合一数据线(限量200个),还有机会抽取蓝牙音箱大奖!
|
26天前
|
数据库
【YashanDB 知识库】exp 导出 csv 报错 YAS-00218 string conversion failed
**问题分类:** 数据导入导出 **关键字:** YAS-00218 string conversion failed **问题描述:** 使用 exp 导出成 CSV 时,报错 YAS-00218 string conversion failed。 **原因分析:** 数据库服务端字符集为 GBK,但客户端缺少 yasc_env.ini 文件,导致默认使用 UTF8 字符集。 **解决方法:** 创建 yasc_env.ini 文件并设置 CHARACTER_SET=GBK。 **影响范围:** 23.2.1.100
|
2月前
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
126 7
MySQL事务日志-Undo Log工作原理分析
|
2月前
|
关系型数据库 MySQL 数据库
mysql慢查询每日汇报与分析
通过启用慢查询日志、提取和分析慢查询日志,可以有效识别和优化数据库中的性能瓶颈。结合适当的自动化工具和优化措施,可以显著提高MySQL数据库的性能和稳定性。希望本文的详解和示例能够为数据库管理人员提供有价值的参考,帮助实现高效的数据库管理。
58 11
|
1月前
|
缓存 NoSQL 关系型数据库
MySQL原理简介—4.深入分析Buffer Pool
本文介绍了MySQL的Buffer Pool机制,包括其作用、配置方法及内部结构。Buffer Pool是MySQL用于缓存磁盘数据页的关键组件,能显著提升数据库读写性能。默认大小为128MB,可根据服务器配置调整(如32GB内存可设为2GB)。它通过free链表管理空闲缓存页,flush链表记录脏页,并用LRU链表区分冷热数据以优化淘汰策略。此外,还探讨了多Buffer Pool实例、chunk动态调整等优化并发性能的方法,以及如何通过`show engine innodb status`查看Buffer Pool状态。关键词:MySQL内存数据更新机制。
|
3月前
|
SQL 关系型数据库 MySQL
MySQL 窗口函数详解:分析性查询的强大工具
MySQL 窗口函数从 8.0 版本开始支持,提供了一种灵活的方式处理 SQL 查询中的数据。无需分组即可对行集进行分析,常用于计算排名、累计和、移动平均值等。基本语法包括 `function_name([arguments]) OVER ([PARTITION BY columns] [ORDER BY columns] [frame_clause])`,常见函数有 `ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`, `SUM()`, `AVG()` 等。窗口框架定义了计算聚合值时应包含的行。适用于复杂数据操作和分析报告。
199 11
|
4月前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
492 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
5月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1907 14
MySQL事务日志-Redo Log工作原理分析
|
5月前
|
存储 关系型数据库 MySQL
基于案例分析 MySQL 权限认证中的具体优先原则
【10月更文挑战第26天】本文通过具体案例分析了MySQL权限认证中的优先原则,包括全局权限、数据库级别权限和表级别权限的设置与优先级。全局权限优先于数据库级别权限,后者又优先于表级别权限。在权限冲突时,更严格的权限将被优先执行,确保数据库的安全性与资源合理分配。
|
5月前
|
SQL 关系型数据库 MySQL
MySQL 更新1000万条数据和DDL执行时间分析
MySQL 更新1000万条数据和DDL执行时间分析
382 4

热门文章

最新文章