Mysql数据库,插入内容包含emoji表情错误:Incorrect string value: '\xF0\x9F\x98\x84'

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'

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值