项目使用mysql接收emoji表情

需要修改数据库、表、字段编码格式为utf8mb4

1.修改表字符集

ALTER table usr_user charset=utf8mb4;

2.修改字段字符集

ALTER table usr_user modify nick_name varchar(100) character set utf8mb4 collate utf8mb4_general_ci comment ‘姓名’;

3.代码中连接池增加

@Bean(destroyMethod="close",initMethod="init")
@ConfigurationProperties(prefix="spring.datasource")
publicDataSourcedataSource(){
	DruidDataSourcedataSource=newDruidDataSource();
	dataSource.setPasswordCallback(dbPasswordCallback());
	//支持表情
	StringTokenizertokenizer=newStringTokenizer("SET NAMES utf8mb4",";");
	dataSource.setConnectionInitSqls(Collections.list(tokenizer));//重点设置该参数
	return  dataSource;
}

或者在配置文件配置此属性(还需看使用什么类型的连接池):

连接池为hikari

# 接收emoji表情
​
spring:
  datasource:
    hikari:
      connection-init-sql: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci

​

或者是这个样子的(tomcat)

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://*.*.*.*:3306/dbname?useUnicode=true&characterEncoding=utf-8
    username: username
    password: password
    tomcat:
      init-s-q-l: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci

 又或者是这样的(连接池是druid)

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.p6spy.engine.spy.P6SpyDriver
    url: jdbc:p6spy:mysql://***/***?autoReconnect=true&useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
    username: ***
    password: ***
    druid:
      connection-init-sqls: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci

4.修改数据库字符集

看了很多文章都是在mysql服务器修改my.cnf中的字符集配置,然后重启mysql

配值如下

[client]
default-character-set=utf8mb4
 
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
skip-character-set-client-handshake = true
 
[mysql]
default-character-set = utf8mb4

其中character-set-server 和 collation-server 这些设置为utf8mb4字符集是比较容易理解的,就是将MySQL数据库相关的字符集都设置为utf8mb4;
但为了实现客户端utf8连接到MySQL后,使用的也是utf8mb4字符集,就在 mysqld配置中配置了 init_connect=‘SET NAMES utf8mb4’ 表示初始化连接都设置为utf8mb4字符集,再配置一个 skip-character-set-client-handshake = true 忽略客户端字符集设置,不论客户端是何种字符集,都按照init_connect中的设置进行使用,这样就满足了应用的需求。

这些参数在my.cnf配置好后,重启mysql实例让设置生效,应用人员经过各种测试后,确认满足字符集要求,各方面正常。

也可以使用Navicat,直接使用编辑功能修改编码格式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值