通俗易懂地解决中文乱码问题(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......相关推荐
- 【已解决】Mysql 存储 emoji 表情报错 Incorrect string value: ‘\xF0\x9F\x98\x82\xF0\x9F
mysql 库.表.字段 字符集从 utf8 改为 utf8mb4 校验规则改为 utf8mb4_unicode_ci
- JAVA连接mysql字段插入中文报错Incorrect string value: ‘\xXX\xXX\xXX\xXX‘ for column ‘xxx‘
解决方案 数据库字符集使用utf8mb4 表字符集使用utf8mb4 如果报错字段类型为longtext,需要在数据库连接字符串中增加参数clobCharacterEncoding=utf-8
- mysql xf0x9fx8ex88_【Mysql】解决插入数据出现 Incorrect string value: '\xF0\x9F\x92\x8BTi...'错误...
背景: 用户输入的表单里边.存在 手机自带的表情, 在执行插入时候报错 Incorrect string value: '\xF0\x9F\x92\x8BTi...' 错误原因:我们在设置mysql ...
- PHPWord生成word 下载 解决中文乱码
文章分两部分:一是代码部分,第二是解决中文乱码. 使用PHPWord生成Word文档 下载或保存到服务器 /*生成word文档*/public function makePhpWord(){vendo ...
- mysql建表时插入中文_Mysql新建表,插入中文时报错“Incorrect string value: '\xE4\xBD\xA0\xE5\xA5\xBD' for column”问题...
有时候我们在往数据库中输入信息时,如果输入的内容是中文,会报错"Incorrect string value: '\xE4\xBD\xA0\xE5\xA5\xBD' for column&q ...
- php utf-8读取,PHP读取文件,解决中文乱码UTF-8的方法分析
PHP读取文件,解决中文乱码UTF-8的方法分析,方法,中文,操作技巧,文本,本文 PHP读取文件,解决中文乱码UTF-8的方法分析 易采站长站,站长之家为您整理了PHP读取文件,解决中文乱码UTF- ...
- 【原创】通俗易懂地解决中文乱码问题(1) --- 跨平台乱码
[原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 参考文章: (1)[原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 (2)https://www.cnblogs.com/xi ...
- 微信公众号回复、接收消息中中文乱码问题的分析及解决
微信公众号回复.接收消息中文乱码问题的分析及解决 为了方便,我们把接收时用的编码记为A.把处理时用的编码记为B.把返回时用的编码记为C 文章目录 微信公众号回复.接收消息中文乱码问题的分析及解决 中文 ...
- php读取pdf文件乱码_PHP读取文件,解决中文乱码UTF-8的方法分析
本文实例讲述了PHP读取文件,解决中文乱码UTF-8的方法.分享给大家供大家参考,具体如下: $opts = array( 'file' => array( 'encoding' => & ...
最新文章
- Java同一个类的不同实例_如何创建2个类实例注入不同类的依赖项实现(通过guice)?...
- 首次使用mysql_mysql的初次使用操作
- 应用程序进程(二):启动线程池
- IDEA 2021.3 正式发布:支持远程开发、故障排查、Java和Spring等多项优化改进
- Python语言学习之时间那些事:python和时间的使用方法之详细攻略
- Centos7单用户模式修改root密码
- [转]权限树中Checkbox的操作[Asp.Net2.0]
- win10计算机启动一分钟重启,Win10开机提示电脑将在一分钟后自动重启怎么办?...
- cs1.6 linux,Ubuntu 8.04下用Wine 0.9.59安装cs1.6 (Esai_Cs1.6_2834)
- python软件要钱吗-python语言是免费还是收费的?
- HKEY_CURRENT_USER下在服务中注册自启动exe
- Android studio输入m自动提示成员变量名称
- [英语语法]词法之动词:时态语态
- 体育教学与计算机技术的结合点,【大学教育论文】虚拟现实技术在高校体育教育的应用(共2757字)...
- vue中el-dialog弹窗关闭,子组件控制父组件
- python学习 之 pyqt5前后端分离试验(进度条)
- dell刷sn_戴尔笔记本怎么查询sn码
- 测度论与概率论基础学习笔记3——2.1测度的定义与性质
- java基础技能清单
- 2021-2027全球与中国半导体掩膜版市场现状及未来发展趋势