小程序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

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

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

二、 直接将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;

}

}

}

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

你可能感兴趣的:(小程序mysql保存emoji)