踩坑mysql保存emoji表情报错

表单输入emoji提交报错。查看了后台日志,发现这样的日志:

org.springframework.jdbc.UncategorizedSQLException: ### Error updating database. Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x83' for column 'name' at row 1 

查看mysql表字符编码发现这个表使用的是utf8编码,utf8编码最多只支持3个字节,而emoji是四字节编码的。所以先将数据库表字节编码改为utfbmb4,该编码是utf8的超集,支持四字节编码字符存储。

    alter table 表名 character set utf8mb4;

执行上述语句后,仍然报错,查看表字段字符编码,发现表字段编码仍为utf8,所以再将表字段编码改为utf8mb4,

alter table 表名 convert to charset utf8mb4;

执行此步后,插入emoji仍然报错。此时数据库已经支持emoji存储,所以考虑是jdbc驱动的问题。

查看jdbc驱动版本是5.1.18。而jdbc驱动从5.1.13就开始支持utf8mb4了,所以不是驱动版本的问题。再看一下jdbc url是这样的:

jdbc:mysql://10.101.80.98:3306/test?useUnicode=true&autoReconnect=true&characterEncoding=UTF8&allowMultiQueries=true

问题在于characterEncoding=UTF8这个参数设置。原来jdbc 驱动版本5.1.13以后,就不需要设置此参数了,将此参数去掉,jdbc url改为

jdbc:mysql://10.101.80.98:3306/test?useUnicode=true&autoReconnect=true&allowMultiQueries=true

再次测试,可以成功插入emoji了。

总结:

MySQL保存emoji注意点

  1. MySQL版本大于5.5.3
  2. 数据表和字段编码采用utf8mb4
  3. jdbc驱动版本大于5.1.13
  4. jdbc url不要指定characterEncoding参数
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值