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

4 篇文章 0 订阅

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值