java.sql.SQLException:Incorrectstringvalue:'/xF0/x9F/x90/x94"

2016-12-27 19:52:40来源:作者:人点击

错误提示:java.sql.SQLException: Incorrect string value: '/xF0/x9F/x90/x94"

原因是Mysql里UTF8编码最多只能支持3个字节,而Emoji表情字符使用的UTF8编码,很多都是4个字节,有些甚至是6个字节。

解决的方案有两种:
1.使用utf8mb4的mysql编码来容纳这些字符。
2.过滤掉这些特殊的表情字符。

关于第一种解决方法,请参考:http://segmentfault.com/a/1190000000616820 和 http://info.michael-simons.eu/2013/01/21/Java-mysql-and-multi-byte-utf-8-support/
有大量细节需要注意,例如:mysql版本,mysql的配置,mysql connector的版本等等。。

因为我们使用的云数据库,所以我选择了过滤这些特殊字符。其实过滤的方式很简单,直接使用正则表达式匹配编码范围,然后替换就行了。

下面是代码。

public static String filterEmoji(String source) {          if(source != null)         {             Pattern emoji = Pattern.compile ("[/ud83c/udc00-/ud83c/udfff]|[/ud83d/udc00-/ud83d/udfff]|[/u2600-/u27ff]",Pattern.UNICODE_CASE | Pattern . CASE_INSENSITIVE ) ;             Matcher emojiMatcher = emoji.matcher(source);             if ( emojiMatcher.find())             {                 source = emojiMatcher.replaceAll("*");                 return source ;             }         return source;        }        return source;      }

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台