在進行Mysql 存儲的時候,發(fā)現(xiàn)在保存帶有emoji表情的時候,保存失敗,錯誤信息為:

出現(xiàn)的原因
- 經(jīng)過網(wǎng)上查閱發(fā)現(xiàn),mysql字符集大多數(shù)使用的是utf8,而mysql的utf8編碼的一個字符最多3個字節(jié),但是一個emoji表情為4個字節(jié),所以utf8不支持存儲emoji表情。但是utf8的超集utf8mb4一個字符最多能有4字節(jié),所以能支持emoji表情的存儲,并且兼容utf8
觖決方法
- 方法一
- 修改數(shù)據(jù)庫編碼集設(shè)置為utf8mb4,無論是數(shù)據(jù)庫還是表,還是字段
- 方法二
- 如果有些原因你不能修改數(shù)據(jù)庫編碼或者其他原因,有一個插件可以幫到你,我也是用這種方式處理的,emoji-java這個類庫,它可以幫你去掉表情,或者以其他可以存儲的字符來代替emoji表情,話不多說,看代碼:
首先加入依賴

存儲過程中的中文示例:

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表情轉(zhuǎn)換成別名的形式: " + EmojiParser.parseToAliases(json.toString()));
System.out.println("將emoji表情轉(zhuǎn)換成html十進制表示: " + EmojiParser.parseToHtmlDecimal(json.toString()));
}

從運行結(jié)果可以看出,emoji-java類庫很好的處理了emoji表情字符串的處理,到此結(jié)束。
有什么問題大家可以留言
|