標籤:cti builder ase lob utf8 l資料庫 mysql資料庫 mys dep
前提:mysql資料庫版本不能低於5.5。
第一種方法:百度一搜一大堆,主要內容就是:修改mysql設定檔(需要重啟資料庫),修改表和欄位的編碼,都改成utf8mb4。
第二種方法:從jdbc入手,每次調用資料庫前執行一下 set names utf8mb4;
使用druid資料來源的項目,可以在設定檔中增加<property name="connectionInitSqls" value="set names utf8mb4;"/>,
其他資料來源應該也有類似的配置。
第三種方法:將要存入的內容重新編碼,寫入前用new BASE64Encoder().encode()編碼,從資料庫讀取後用new BASE64Decoder().decodeBuffer()解碼。
第四種方法:使用blob類型儲存emoji表情,blob類型是二進位類型,不關心編碼格式,讀取之後轉成String即可。
另類方法:這個不算是解決寫入emoji方法,只是在代碼中把emoji內容過濾掉(有點暴力),防止寫入資料庫報錯。
public static String filterUtf8mb4(String str) {final int LAST_BMP = 0xFFFF;StringBuilder sb = new StringBuilder(str.length());for (int i = 0; i < str.length(); i++) {int codePoint = str.codePointAt(i);if (codePoint < LAST_BMP) {sb.appendCodePoint(codePoint);} else {i++;}}return sb.toString();}
emoji字元對應的code point 大於 U+FFFF,把這些過濾掉再寫入資料庫就不會報錯了。 code point參考:http://www.cnblogs.com/chrischennx/p/6623610.html
java項目向mysql中寫入emoji表情