数据库不需要重启数据库的方式支持微信表情

本文介绍了一种在MySQL中存储表情符号的方法。由于MySQL utf8编码仅支持3字节字符,无法直接存储4字节的emoji表情。文章提供了解决方案,包括升级MySQL版本、更改JDBC驱动、调整表字段编码至utf8mb4等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

后台日志显示数据库提交失败。查看日志如下:

java.sql.SQLException: Incorrect string value:‘\xF0\x9F\x92\x94’ for column ‘name’ at row 1

 

经过分析,是因为用户在“最大的期望”栏输入了微信表情,由于MySQLutf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符。如果直接往采用utf-8编码的数据库中插入表情数据,Java程序中将报SQL异常。

 

为了快速解决,当时处理方式是转译存储,取出来的时候,再进行解码。但是这样做会使得任何使用该字符的地方都要进行编码与解码。

utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。 

采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。

 

方式:

1MySQL的版本不能太低,低于5.5.3的版本不支持utf8mb4编码。selectversion(); 查看版本,目前我们是5.5.38

2JDBC驱动版本不能太低,mysqlconnector版本高于5.1.13。便利店是:mysql-connector-java-5.1.33.jar

3、将表中的对应字段,比如申请入驻表的对京东便利店最大的期望字段,其字符集修改成utf8mb4

ALTER TABLE xxx_apply MODIFY COLUMNremark VARCHAR(600)CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '最大的期望';

或者直接修改整张表

ALTER TABLE xxx_apply CONVERT TOCHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

4、最后修改dbcp数据源的配置,增加一行:<propertyname="connectionInitSqls" value="set names utf8mb4;"/>

5、检查下jdbc连接串的设置:jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8

characterEncoding=utf8会自动识别为utf8mb4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值