mysql中写入emoji表情错误

第一种方法:百度一搜一大堆,主要内容就是:修改mysql配置文件(需要重启数据库),修改表和字段的编码,都改成utf8mb4。

 

第二种方法:从jdbc入手,每次调用数据库前执行一下 set names utf8mb4;

使用druid数据源的项目,可以在配置文件中增加<property name="connectionInitSqls" value="set names utf8mb4;"/>,

其他数据源应该也有类似的配置。

 

第三种方法:将要存入的内容重新编码,写入前用new BASE64Encoder().encode()编码,从数据库读取后用new BASE64Decoder().decodeBuffer()解码。

 

第四种方法:使用blob类型存储emoji表情,blob类型是二进制类型,不关心编码格式,读取之后转成String即可。

 

另类方法:这个不算是解决写入emoji方法,只是在代码中把emoji内容过滤掉(有点暴力),防止写入数据库报错。

1

2

3

4

5

6

7

8

9

10

11

12

13

public static String filterUtf8mb4(String str) {

        final int LAST_BMP = 0xFFFF;

        StringBuilder sb = new StringBuilder(str.length());

        for (int i = 0; i < str.length(); i++) {

            int codePoint = str.codePointAt(i);

            if (codePoint < LAST_BMP) {

                sb.appendCodePoint(codePoint);

            } else {

                i++;

            }

        }

        return sb.toString();

    }

  emoji字符对应的code point 大于 U+FFFF,把这些过滤掉再写入数据库就不会报错了。 code point参考:

 

亲测 推荐第二种方法 效果不错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值