1.出现场景:
保存微信用户昵称,发现昵称中包含特殊字符,导致如下异常
Caused by: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x90\xAF’ for column ‘nickName’ at row 1
数据库编码为UTF-8,MySQL的UTF-8编码最多3个字节,EMOJI表情或者某些特殊字符的编码是4个字节,导致存入数据时发生了异常。
2.解决:
存之前base64_encode(),取的时候base64_decode()
Base64.Encoder encode=Base64.getEncoder(); //加密
Base64.Decoder decoder=Base64.getDecoder(); //解密
String nickName="哈哈哈123😃";
byte[] nickByte = nickName.getBytes("UTF-8");
String encodeToString = encode.encodeToString(nickByte);
System.out.println("【"+nickName+"】加密后="+encodeToString+"");
byte[] decode = decoder.decode(encodeToString);
String decoderNickName=new String(decode);
System.out.println("【"+decode+"】解密后="+decoderNickName+"");
返回结果:
上面是我模拟的一个小案例,如有缺陷,希望大家给提出建议。