1.問題產生情況
我遇到這個問題是做微信開發的時候有些有用的頭像用了微信的emoji表情,然而我的mysql數據庫用的編碼是utf8_general_ci,就是utf-8編碼,結果也就報錯誤了。
2.爲什麼會出現這種原因
因爲mysql的utf8編碼的一個字符最多3個字節,但是一個emoji表情爲4個字節,所以utf8不支持存儲emoji表情。但是utf8的超集utf8mb4一個字符最多能有4字節,所以能支持emoji表情的存儲。
3.解決方法之一
把你的數據庫編碼集設置爲utf8mb4,無論是數據庫還是表,還是字段。雖然會增加存儲,但是這個可以忽略不計。
4.解決方法之二
有句話說得好,問題來了要麼解決要麼折中解決。如果有些原因你不能修改數據庫編碼之類的,你可以用java的一些插件,如emoji-java這種emoji表情插件對錶情進行特殊處理,然後保存或者去掉表情,這也是一種解決方法哦。
5.最後說點什麼
通過對一個問題不同角度的思考,原來才發現世界同而不同,不同而同......
import com.github.binarywang.java.emoji.EmojiConverter;
/**
* 表情處理類
* @author Administrator
*
*/
public final class EmojiUtil {
private static EmojiConverter emojiConverter = EmojiConverter.getInstance();
/**
* 將emojiStr轉爲 帶有表情的字符
* @param emojiStr
* @return
*/
public static String emojiConverterUnicodeStr(String emojiStr){
String result = emojiConverter.toUnicode(emojiStr);
return result;
}
/**
* 帶有表情的字符串轉換爲編碼
* @param str
* @return
*/
public static String emojiConverterToAlias(String str){
String result=emojiConverter.toAlias(str);
return result;
}
}
使用的框架是:
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>java-emoji-converter</artifactId>
<version>0.0.1</version>
</dependency>