mysql存储emoji表情

问题:

微信的昵称可以含有emoji表情,把这样的昵称存储到数据库时出现了这个异常:

java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x95  ...' for column 'nickName' at row 1

分析:

简单的说,就是utf-8字符集不够用了,emoji超过了utf-8的范围

解决方案:

就是要使用新的字符集utf8mb4(Mysql 5.5.3之后的版本才支持utf8mb4),

有两种方案

1.(网上找的,没试过,不知道有没有用)

修改mysql的配置文件,windows下的为my.ini(linux下的为my.cnf),改成下面这样

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

将数据库中对应的字段改为

     字符集:utf8mb4

     排序规则:utf8mb4_general_ci

修改项目中的连接数据库的url,将characterEncoding=utf-8去掉

2.(适用于使用阿里巴巴druid连接池的,亲测有效)

同样需要将数据库中对应的字段改为

     字符集:utf8mb4

     排序规则:utf8mb4_general_ci

项目中的连接数据库的url保留characterEncoding=utf-8

spring配置文件spring-common.xml(文件名可能不同)连接池配置增加一行

<bean id="masterDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">

   <property name="connectionInitSqls" value="set names utf8mb4;"/>

...

</bean>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值