java Mysql 存储emoji表情解决方案

来源:转载

在进行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表情字符串的处理,到此结束。

有什么问题大家可以留言

分享给朋友:
您可能感兴趣的文章:
随机阅读: