MySql存取Emoji,如何完美解决

1,145 阅读1分钟

前言

在保存微信昵称或者其他包含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个:

github.com/vdurmont/em…

<dependency>
   <groupId>com.vdurmont</groupId>
    <artifactId>emoji-java</artifactId>
    <version>5.1.1</version>
</dependency>

github.com/binarywang/…

<dependency>
    <groupId>com.github.binarywang</groupId>
    <artifactId>java-emoji-converter</artifactId>
    <version>1.0.0</version>
</dependency>

具体使用方法参考相关文档。

但是此方法也有一定的局限性,一些新的emoji表情,这些转换库并不能成功转换,此时需要做一些特殊处理,比如当使用转换库之后再做一次替换:

str.replaceAll("[^\\u0000-\\uFFFF]", "□");

将所有的未转换的emoji字符转换成“□”或者其他任意字符,以此保证数据库保存不会报错。