【坑】emoji表情保存至mysql中报错

报错

java.sql.SQLException: Incorrect string value: '\xF0\x9D\x92\xA9'

背景

  • 保存一个Emoji表情至数据中时出现如标题的报错

原因

  • 当前Mysql数据库字符集设定为:utf8,只能保存3字节的字符
  • emoji表情为4字节字符,保存时报错(一些特殊字符和表达式保存报错一般也是由于这个原因)

解决方案

  • 修改数据库字符集为 utf8mb4
吐槽
  1. 字符集分为数据库级别,表级别,字段级别三个级别;
  2. 由于这个服务是一个很老的核心服务,针对方案是最小最稳妥的改动来修复问题,所以我们采用的是仅仅修改字段级别的字符集为utf8mb4,表级别为utf8保持不动,库级别的下面再说。
  3. 因为在自己电脑上进行DEMO预演过,本来以为很简单,一个SQL的事就解决问题,结果。。。

遭遇坎坷历程

1. 修改字段的字符集为utf8mb4后,插入表情时,报错依旧

怀疑是不是仅修改字段级别字符集无用,数据库级别字符集也需要修改,于是对比了本地数据库和运行环境数据库的字符集

查看数据库级别字符集SQL: show variables like '%char%';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值