前言
在保存微信昵称或者其他包含Emoji的文本到mysql数据库的时候,会出现类似错误:
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name',
这是因为数据库的字符编码一般是 utf8(支持的编码范围为 \u0000-\uFFFF),而 Emoji 所在的编码范围超出 MySql 的边界了。
下面提供2种解决方法:
1、修改mysql字符集为utf8mb4
参考链接 :https://blog.csdn.net/shoot_your_face/article/details/67632062
2、使用emoji转换库
推荐以下2个:
<dependency>
<groupId>com.vdurmont</groupId>
<artifactId>emoji-java</artifactId>
<version>5.1.1</version>
</dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>java-emoji-converter</artifactId>
<version>1.0.0</version>
</dependency>
具体使用方法参考相关文档。
但是此方法也有一定的局限性,一些新的emoji表情,这些转换库并不能成功转换,此时需要做一些特殊处理,比如当使用转换库之后再做一次替换:
str.replaceAll("[^\\u0000-\\uFFFF]", "□");
将所有的未转换的emoji字符转换成“□”或者其他任意字符,以此保证数据库保存不会报错。