Mysql数据库,插入内容包含emoji表情错误:Incorrect string value: '\xF0\x9F\x98\x84'_parsetoaliases 有部分表情无法转换-程序员宅基地

技术标签: 日常总结  emoji表情  mysql  

1.问题描述

项目需要把excel表格内容插入mysql,但是内容中包含emoji表情,特殊字符,出现错误Incorrect string value: '\xF0\x9F\x98\x84'

2原因

Mysql的UTF-8只支持三个字节的存储,而一般字符是三个字节,但是emoji表情是4个字节,所以存储不了。

为了解决这个问题,Mysql在5.5.3版本之后转而支持了存储4个字节的utf8字符,字符集为utf8mb4.

3.解决办法

3.1修改字符集

线上环境的字符集,显然不好处理,不可能因为一个接口数据修改字符集,当然放弃

3.2过滤掉emoji表情

把特殊字符的内容过滤掉,然后存储

Maven加入依赖如下:

<dependency>
  <groupId>com.vdurmont</groupId>
  <artifactId>emoji-java</artifactId>
  <version>5.1.1</version>
</dependency>

String string = EmojiParser.removeAllEmojis(string);

 这种方法,缺点就是需要过滤部分内容

3.3转换emoji

github,码农神器,搜索之后发现:https://github.com/vdurmont/emoji-java

开源工具,经过验证之后确实是解决了问题

思路:1.插入的时候,把emoji表情转换为一个别名

           2.查询后,把查询结果再把别名转换为原来的emoji表情

Maven 加入
<dependency>
  <groupId>com.vdurmont</groupId>
  <artifactId>emoji-java</artifactId>
  <version>5.1.1</version>
</dependency>

第一步:To aliases
String str = "An ?awesome ?string with a few ?emojis!";
String result = EmojiParser.parseToAliases(str);

第二步:
String str = "An :grinning:awesome :smiley:string &#128516;with a few :wink:emojis!";
String result = EmojiParser.parseToUnicode(str);

 参考:MySQL插入emoji表情错误的3种解决方案,Incorrect string value: '\xF0\x9F\x98\x84'

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/HuoqilinHeiqiji/article/details/102610970

智能推荐

一、基于JAVA的GB28181实现之SIP服务_java gb28181-程序员宅基地

文章浏览阅读2.8k次。GB28181定义了了 基于SIP架构的 视频监控互联规范,而对于多数私有协议实现的监控系统如果想接入SIP架构,就要借助网关,GB28181 规范了实现 SIP 监控域与非SIP 监控域互联。最近用JAVA的SIP协议写了一个GB28181平台的对接,并成功完成了海康、大华、中威等设备,更重要的是海康平台、公安一所平台的对接。因为行业内很少有JAVA方面的设备接入实现,希望本篇能够让JAVA在安防接入生态中发挥越来越大的作用。_java gb28181

深入理解操作系统原理之文件系统_磁带设备的主要用途是作为文件系统的后备,存放不常用的信息或用做系统间传送信息-程序员宅基地

文章浏览阅读3.1w次,点赞20次,收藏154次。一、概述操作系统对系统的软件资源(不论是应用软件和系统软件)的管理都以文件方式进行,承担这部分功能的操作系统称为文件系统。1、文件计算机系统对系统中软件资源:无论是程序或数据、系统软件或应用软件都以文件方式来管理。文件是存贮在某种介质上的(如磁盘、磁带等)并具有文件名的一组有序信息的集合。 文件名是由字符和数字组成的,例如MS-DOS中文件名由三部分组成,格式如下:[] [._磁带设备的主要用途是作为文件系统的后备,存放不常用的信息或用做系统间传送信息

ipadpro编写java代码_iPad Pro变生产力工具,你还缺个轻量级浏览器端代码编辑器...-程序员宅基地

文章浏览阅读6.5k次,点赞3次,收藏15次。本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,转载请联系出处。注意,这篇文章就是在劝你买iPad Pro(手动狗头)~最近,苹果推出了新的iPad Pro,号称生产力工具。然而对程序员来说,不能写代码,就难以称得上生产力。虽然也有一些优秀的写代码App可供程序员使用,但本着能不花钱就不花钱的原则,还是可以去找一些开源软件。于是乎,现在有一款免费的浏览器端代码编辑器CodeJar,值得..._ipad写代码软件java

Elasticsearch学习--2 安装es、kibana、分词器_kibana查看索引分词器-程序员宅基地

文章浏览阅读418次。ES的安装下载地址https://www.elastic.co/cn/downloads/past-releases#elasticsearch示例下载的6.2.4版本慢的话,可以去华为云镜像下载,速度杠杠的https://mirrors.huaweicloud.com/elasticsearch/安装步骤前置环境:centos7、jdk1.81、保证有linux的非root用户es不能通过root用户启动,会报错;如果没有,新建用户,命令如下:新建用户:useradd xxxx _kibana查看索引分词器

1.Echarts设置图例数值和名称样式不同_echarts series name 怎么设置不同的值-程序员宅基地

文章浏览阅读223次。Echarts设置图例数值和名称样式不同_echarts series name 怎么设置不同的值

Nodejs项目部署到华为云服务器并上线超详细教程_nodejs服务器-程序员宅基地

文章浏览阅读674次,点赞26次,收藏7次。由于是第一次做Nodejs项目,发现网上关于Nodejs项目部署服务器的教程的质量参差不齐,对于初学者很不友好,看了一堆教程,最后还是不会,一头雾水,所以决定自己写一个详细教程,方便以后学习查看并记录。废话不多说,正文正式开始;_nodejs服务器

随便推点

前端项目部署后,如何提示用户版本更新_前端通知用户更新-程序员宅基地

文章浏览阅读8k次,点赞93次,收藏86次。项目部署上线后,特别是网页项目,提示正在操作系统的用户去更新版本非常important。一般我们都会用“刷新大法”来清理缓存,但是对于正在操作网页的用户,不造系统更新了,请求的还是老版本的资源。为了确保用户能够及时获得最新的功能和修复的 bug,我们需要通知用户刷新页面获取最新的代码。_前端通知用户更新

DOM Based Cross Site Scripting or XSS of the Third Kind_the application may be vulnerable to dom-based dom-程序员宅基地

文章浏览阅读2k次。SummaryWe all know what Cross Site Scripting (XSS) is, right? It’s that vulnerability wherein one sends malicious data (typically HTML stuff with Javascript code in it) that is echoed back later by _the application may be vulnerable to dom-based dom data manipulation. data i

Vue3父子组件emit参数传递(解决Vue2this.$emit无效问题)_vue3 this.$emit-程序员宅基地

文章浏览阅读2.4w次,点赞13次,收藏24次。之前写了一篇Vue3路由跳转问题的博客,发现还是有很多同学对基本的使用改变还没有了解,于是我就顺道把常用的组件间传递的方式也写一下吧.......注意的是:1.Vue3中不在强调this的使用,可以说你在setup中完全不能用this,不像Vue2中把全部的内容都集成到this中。2.Vue3现在由于compositionAPI的方式可以说是弱化了Vuex的存在(当然Vuex现在可以用没什么变化)。3.如果您有Vue2的开发经历,用Vue3也不会特别陌生,会很快上手。目录1.解决._vue3 this.$emit

Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【1.3】_unity分布式仿真-程序员宅基地

文章浏览阅读610次,点赞18次,收藏9次。C#语言从本质上来说是在C++语言的基础上衍生出来,它是基于托管生成和指针管理的一种面向对象的编程语言。相比C++语言,它是一门更加简单、安全和易于学习的语言。它继承了C++语言强大的功能,摒弃了一些C++语言里比较复杂的使用方法,比如去掉了宏模板多重继承这些复杂的概念。C#语言借用了Visual Basic语言的可视化编程方法,基于.NET的开发库,开发了一套C#使用的可视化编程库,让C#语言,既拥有C++语言的强大能力,也更加人性化,让开发人员更加易于上手。C#语言具有以下特性:·语言简洁。_unity分布式仿真

[proxy:0:0@WORKSTATION-DEV] HYDU_sock_write (utils/sock/sock.c:256): write error (Broken pipe)_[proxy:0:1@58264c013f86] launch_procs (./pm/pmiser-程序员宅基地

文章浏览阅读2k次。[proxy:0:0@WORKSTATION-DEV] HYDU_sock_write (utils/sock/sock.c:256): write error (Broken pipe)_[proxy:0:1@58264c013f86] launch_procs (./pm/pmiserv/pmip_cb.c:648): unable t

推荐文章

热门文章

相关标签