欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql 存储评论内容报错(含有emjoy字符)

程序员文章站 2022-09-05 13:18:17
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......

1、报错内容:

mysql 存储评论内容报错(含有emjoy字符)

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