spring boot mysql 存储表情的问题解决方案

最近做项目遇到了存表情包的问题,作一下记录(省略了部分具体的语句,适合有基础的人员阅读):

utf8和utf8mb4
utf8不是utf-8,最多只支持3字节的字符,utf8mb4最多支持4个字节的字符,emoji表情是有四个字节的字符,所以存表情必须使用utf8mb4的字符集。

mysql
小于mysql5.5.3的版本不支持utf8mb4,所以建议考虑别的存储方案或者升级mysql。大于5.5.3的字段编码必须设置成utf8mb4。

彻底解决方案需要将mysql本身的编码配置成utf8mb4,然后重启,配置内容:
打开配置文件在相应的位置配置:

[mysqld]

character-set-server=utf8mb4

collation_server=utf8mb4_unicode_ci

init-connect="SET NAMES utf8mb4"

[mysql]

default-character-set=utf8mb4
如果是8.0以下的版本也可以不配置数据的编码,只配置相应的表的和列的即可,8.0以上的版本因为时间问题没有具体的根据驱动去尝试,各位大神如果有尝试的可以分享下结果。


spring boot项目中的配置(这里的坑就比较多了,因为一不小心就会被版本搞砸了)

配置前先注意一个pom引入时的版本对应问题,我用的是6.0.6

 下面这个版本对应关系来自知乎这篇文章
MySQL中emoji表情包的存储问题 - 知乎

 如果是数据库的配置不改,一定要注意选对的版本,使用版本还会跟springboot本身的版本有关联,尤其是使用多数据源和事务的时候,所以使用的过程中最好对应起来避免钻很多坑,选择好自己的版本后就需要对连接配置处进行修改。

我的是druid连接池,其他的需要根据自己的配置进行修改,修改要注意的是连接处:useUnicode=true&characterEncoding=UTF-8 编码不能设置utf8mb4,因为没有这个编码,直接用utf8或者utf-8,然后connection-init-sqls: set names utf8mb4这个配置项必加(每个版本或者配置类型属性会有小的差异,自己查看源码寻找对应的配置项即可)

datasource:
  druid:
    master:
      driver-class-name: com.mysql.cj.jdbc.Driver
      type: com.alibaba.druid.pool.DruidDataSource
      url: jdbc:mysql://127.0.0.1:3306/dbname?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true
      username: root
      password: root
      min-idle: 2
      max-active: 3
      max-wait: 6000
      time-between-eviction-runs-millis: 6000
      min-evictable-idle-time-millis: 300000
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      connection-init-sqls: set names utf8mb4

整体配置完成后再尝试表情存储成功 !如果还有问题别着急,一定更要看具体的错误信息调整

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值