java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\x94"

来源:互联网 发布:看图纸软件 编辑:程序博客网 时间:2024/04/20 01:25
错误提示: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;      }

来源1
来源2

0 0