java Mysql 存储emoji表情解决方案

来源:互联网 发布:2016黑马java百度网盘 编辑:程序博客网 时间:2024/06/14 04:15

在进行Mysql 存储的时候,发现在保存带有emoji表情的时候,保存失败,错误信息为:

这里写图片描述

出现的原因

  • 经过网上查阅发现,mysql字符集大多数使用的是utf8,而mysql的utf8编码的一个字符最多3个字节,但是一个emoji表情为4个字节,所以utf8不支持存储emoji表情。但是utf8的超集utf8mb4一个字符最多能有4字节,所以能支持emoji表情的存储,并且兼容utf8

觖决方法

  • 方法一
    • 修改数据库编码集设置为utf8mb4,无论是数据库还是表,还是字段
  • 方法二
    • 如果有些原因你不能修改数据库编码或者其他原因,有一个插件可以帮到你,我也是用这种方式处理的,emoji-java这个类库,它可以帮你去掉表情,或者以其他可以存储的字符来代替emoji表情,话不多说,看代码:

  • 首先加入依赖

    这里写图片描述

  • 存储过程中的中文示例:

这里写图片描述


  • 下面是利用emoji-java类库的代码片断:
public static void main(String[] args) {        Map map = new HashMap();        map.put("name", "\ud83d\ude04正常中文\ud83d\ude04");        map.put("name2", "\ud83d\ude0d\u8c22\ud83d\ude0d");        map.put("desc", "其他");        JSONObject json = (JSONObject) JSON.toJSON(map);        System.out.println("带有emoji表情的字符串打印效果: " + json.toString());        System.out.println("去掉emoji表情的字符串打印效果: " + EmojiParser.removeAllEmojis(json.toString()));        System.out.println("将emoji表情转换成别名的形式: " + EmojiParser.parseToAliases(json.toString()));        System.out.println("将emoji表情转换成html十进制表示: " + EmojiParser.parseToHtmlDecimal(json.toString()));    }
  • 运行结果为:

这里写图片描述


从运行结果可以看出,emoji-java类库很好的处理了emoji表情字符串的处理,到此结束。

有什么问题大家可以留言

原创粉丝点击