小程序mysql保存emoji_微信小程序表情特殊字符的转义问题解决方案

错误信息:

Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\xAA\xE3\ for column `nickname`

背景

保存一个Emoji表情至数据中时出现如标题的报错

原因

当前Mysql数据库字符集设定为:utf8,只能保存3字节的字符

emoji表情为4字节字符,保存时报错(一些特殊字符和表达式保存报错一般也是由于这个原因)

解决方案

一、 如果非得存储emoji表情。mysql5.5.3以下的升级数据库,本来就是5.5以上的直接修改字符集和排序规则,注意一定要同时把排序规则也一起修改了。

修改数据库字符集为 utf8mb4

修改表中对应字段的字符集和排序规则

cf2247261791e76a33e68439abae0ae0.png

二、 直接将emoji表情过滤,我还是觉得这种办法方便,毕竟重装数据库对业务有很大的影响,特别是该数据库中有别的线上项目的数据时根本不允许重装。

package org.linlinjava.litemall.wx.util;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

/**

* 微信小程序nickname特殊字符处理,需要转义

*

* @author jacklin

* @date 2020年08月18日

*/

public class EmojiStringUtils {

/**

* 判断是否存在特殊字符串

*/

public static boolean hasEmoji(String content) {

Pattern pattern = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]");

Matcher matcher = pattern.matcher(content);

if (matcher.find()) {

return true;

}

return false;

}

/**

* 替换字符串中的emoji字符

*/

public static String replaceEmoji(String str) {

if (!hasEmoji(str)) {

return str;

} else {

str = str.replaceAll("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]", " ");

return str;

}

}

}

这时候,报错已经解决了!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值