java.sql.SQLException:Incorrectstringvalue:’\xF0\x9F\x90\x94″

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

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

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

关于第一种解决方法,请参考:https://segmentfault.com/a/1190000000616820 和 https://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; 
     }
(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐