Mysql數據庫存儲emoji表情

emoji表情須要使用編碼格式爲utf8mb4,mysql數據庫版本要5.5以上,我用的是5.6,由於只有5.5以上支持utf8mb4。mysql

1.數據庫編碼設定爲utf8mb4,若是建庫時指定的是utf8,則須要執行語句:ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;算法

2.同時指定數據庫配置參數中character_set_server改成utf8mb4sql

3.把對應的須要保存emoji表情的字段編碼設置爲utf8mb4_unicode_ci數據庫

4.配置完成,則可完美存儲emoji表情了。微信

 

後續優化

最近發現不少新增的微信表情即便是使用了utf8mb4_unicode_ci編碼也沒法存儲,因此索性直接使用base64加密後再存儲,讀取的時候解密便可,這樣就不會在遇到這個使人頭疼的問題了,加密解密算法以下:編碼

注:解密算法我這邊作了一些優化(由於以前數據表中存在一些未加密數據,直接解密會報錯)加密

public static String base64Encode(String str){
        String result="";
        try {
            result = new String (Base64.getEncoder().encode(str.getBytes("utf-8")),"utf-8");
        } catch (Exception e) {
            e.printStackTrace();
            result="";
        }
        System.out.println(result);
        return result;
    }
    public static String base64Decode(String str){
        String result="";
        String base64Pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";
        if(Pattern.matches(base64Pattern, str)){
            try {
                result = new String (Base64.getDecoder().decode(str.getBytes("utf-8")),"utf-8");
                String badChar="�";
                if(result.contains(badChar)){
                    result=str;
                }
            } catch (Exception e) {
                e.printStackTrace();
                result=str;
            }
        }else {
            result=checkNull(str);
        }
        //System.out.println(result);
        return result;
    }
相關文章
相關標籤/搜索