mysql 存储评论内容报错(含有emjoy字符)
1、报错内容:
2、原因:
utf-8编码可能2个字节、3个字节、4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而emjoy是4个字节的字符。如果直接往采用utf-8编码的数据库中插入表情数据,Java程序中将报SQL异常:
3、解决方法:
1)利用正则进行过滤
* 表情字符详情可以参阅http://www.unicode.org/emoji/charts/full-emoji-list.html,查阅了*发现双字节或4字节emojie正则如下范围。(因单字节表情,mysql可以支持,因此未列出。)
/\uD83C[\uDC04\uDE1A]/
/\uD83D[\uDC66-\uDC69]/
/\uD83D\uDC66\uD83C\uDFFB-\uD83D\uDC69\uD83C\uDFFF/
/\uD83D\uDE45\uD83C\uDFFB-\uD83D\uDE4F\uD83C\uDFFF/
/[\uD83C\uDC00-\uD83D\uDFFF]/
/\uD83E\uDD10-uD83E\uDDC0/
/\uD83D\uDE00-\uD83D\uDE4F/
/\uD83D\uDE80-\uD83D\uDEF6/
函数如下:
public String replaceEmoji(String str) {
String patternString = "[\uD83C\uDC04-\uD83C\uDE1A]|[\uD83D\uDC66-\uD83D\uDC69]|[\uD83D\uDC66\uD83C\uDFFB-\uD83D\uDC69\uD83C\uDFFF]|[\uD83D\uDE45\uD83C\uDFFB-\uD83D\uDE4F\uD83C\uDFFF]|[\uD83C\uDC00-\uD83D\uDFFF]|[\uD83E\uDD10-\uD83E\uDDC0]|[\uD83D\uDE00-\uD83D\uDE4F]|[\uD83D\uDE80-\uD83D\uDEF6]";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(str);
return matcher.replaceAll("");
}
2)修改数据库支持的字符类型utf8mb4 ,并且保证mysql版本在5.5.3+,否则mysql版本不支持utf8mb4字符类型,具体配置可参考:https://blog.csdn.net/ggibenben1314/article/details/56290372
本文地址:https://blog.csdn.net/lyz_112233/article/details/85988437
上一篇: Win10 20H2版本新开始菜单界面正进行圆角改造
下一篇: 6、查看表结构命令