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

1、报错内容:

22a4bb6058200b9d8c5138e96b9da98e.png

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

希望与广大网友互动??

点此进行留言吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值