前言:
当前大家对“mysql按字节截取”都比较讲究,看官们都需要知道一些“mysql按字节截取”的相关文章。那么小编也在网络上收集了一些有关“mysql按字节截取””的相关资讯,希望看官们能喜欢,大家快快来了解一下吧!今天在使用mysql存储4字节字符,如emoji时,程序报错,在此记录一下解决方法。测试数据为"",错误如下。
Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x83' for column 'username' at row org.apache.ibatis.exceptions.PersistenceException:
解决方法就是对4字节字符进行编码,变成单字节字符。使用时再进行解码。
编码解码代码如下。
public static String encode(String source){ if(null == source || "" == source){ return null; } StringBuffer sb = new StringBuffer(source.length()*3); for(char c : source.toCharArray()){ if(c >= 0xd800 && c <= 0xdfff ){ sb.append("\\u").append(Integer.toHexString(c)); }else{ sb.append(c); } } return sb.toString(); } public static String decode(String source){ if(null == source || "" == source){ return null; } StringBuffer sb = new StringBuffer(); char [] cArr = source.toCharArray(); for(int i = 0 ; i < cArr.length;){ if((i+5) < cArr.length){ if(cArr[i] == '\\' && cArr[i+1] == 'u'){ sb.append((char)Integer.parseInt(new String(new char[]{cArr[i+2],cArr[i+3],cArr[i+4],cArr[i+5]}),16)); i = i+6; continue; }else{ sb.append(cArr[i++]); } }else{ sb.append(cArr[i++]); } } return sb.toString(); }
来看看结果吧。
请求参数如下,username包含emoji表情字符。
编码存入数据库的结果如下,username中存储的是编码过后的字符。
解码过后的结果如下,username解码过后显示正常。
到此这个问题就解决了。
有问题欢迎反馈,大家一起交流学习!
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #mysql按字节截取