在进行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表情字符串的处理,到此结束。
有什么问题大家可以留言