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

原文:【原创】通俗易懂地解决中文乱码问题(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

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

时间: 2024-10-06 05:35:19

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

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

这篇blog重点在解决问题,如果你对字符编码并不是特别了解,建议先看看 < [原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 >. 当然,如果只是针对解决这个Mysql插入报错问题,本篇足够了. 一.定位错误 定位错误绝对是至关重要的一环.我建议遇到问题耐心分析一下比较好,毕竟“不是所有的牛奶都叫特仑苏”. 引起同一个问题的可能有很多,别人的解决方案也许并不适合自己. 那先看看问题出现在哪了,报错如下: 发现的确是编码错误, 16进制的错误提示(\xF0\x9F\x94\xA5\x

MySQL 中文insert报错Incorrect string value: &#39;\xCC\xEC\xB2\xC5&#39;

    序言:中文录入失败,报错:Incorrect string value: '\xCC\xEC\xB2\xC5',如下所示:mysql> set names utf8;Query OK, 0 rows affected (0.00 sec) mysql> insert into t select 2 as a ,'天才' as b;ERROR 1366 (HY000): Incorrect string value: '\xCC\xEC\xB2\xC5' for column 'b' a

django admin 中文报错incorrect string value解决方案

对于错误" Incorrect string value: '\xE6\xA2\xB5\xE8\x92\x82...'for column 'object_repr' at row 1 解决方法是设置django_admin_log表的object_repr一项使用utf8_unicode_ci: 对于错误"  Incorrect string value: '\xE6\xA2\xB5\xE8\x92\x82...'for column 'change_message' at row

mysql 插入中文字段报错 &quot;Incorrect string value: &#39;\\xE6\\xB5\\x8B\\xE8\\xAF\\x95...&#39; for column &#39;title&#39; at row 1&quot;

1. 查看一个 database 或一个 table 的编码show create database mytestdb;show create table testapp_article; mysql> show create table testapp_article;+-----------------+-----------------------------------------------------------------------------------------------

通俗易懂地解决中文乱码问题(1) --- 跨平台乱码

原文:[原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 本来是只打算写一篇关于中文乱码的blog的,但是发现要讲的东西跨度有点大,不好写到同一篇里面,所以分开了. 另一篇是  <[原创]通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...> . 这一篇重点在编码的理论,另一篇重点在解决问题及思路. 一.问题的开始 中文乱码问题经常出现在实际工程中,尤其容易发生在经验不足的团队对问题预估不

SSH项目web.xml文件的常用配置【struts2的过滤器、spring监听器、解决Hibernate延迟加载问题的过滤器、解决中文乱码的过滤器】

配置web.xml(struts2的过滤器.spring监听器.解决Hibernate延迟加载问题的过滤器.解决中文乱码的过滤器) <!-- 解决中文乱码问题 --> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-c

http通信get,post 中文乱码问题原因分析

转载请注明出处,谢谢! 以前写过一些解决中文乱码的博客.但是以前只给了解决方案,并没有分析原因. 今天来分析一下乱码的原因: 1.通过浏览器给后台提交数据的时候,默认使用的是ISO-8859-1提交的 所以在Servlet中收到中文数据时要做编码转换. 把字符串按照iso-8859-1转换为字节,然后把字节转换为utf-8 name = new String(name.getVBytes("iso-8859-1","utf-8"));[如果没有这个,控制台可以输出正

Python3.x:BeautifulSoup()解决中文乱码问题

Python3.x:BeautifulSoup()解决中文乱码问题 问题: BeautifulSoup获取网页内容,中文显示乱码: 解决方案: import requests from bs4 import BeautifulSoup html = requests.get(url, headers=Hostreferer) soup = BeautifulSoup(html.content, "html.parser", fromEncoding="gb18030"

Cocos2d-x 3.1.1 学习日志4--cocos2d-x解决中文乱码问题的几种办法

做个打飞机的游戏,由于版本太新,网上基本没有教教程,我的版本是cocos2d-x 3.1.1的,今天遇到cocos2dx中中文乱码的问题.无奈只好Google百度寻求答案,明白了这个问题的缘由.因为cocos2d-x内部是以utf8处理文本的,而VS直接输入时文本编码为GBK,如果添加L标志,则为Unicode编码. 解决这个问题有三种办法: 将源代码文件保存为utf8编码,不过由于编译器的问题,这种方式会导致很多无法预测的问题 将字符串用utf8编码集中存到一文件中,然后用代码读取这些字符串来