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; }