Emoji表情符 - 数据库存储

一.问题

页面需要微信授权时,如果用户微信名称中带有emoji表情,会无法存储在数据库中。

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

二.查询

根据面向百度编程:
(1)MySQL的utf8编码只支持3字节的数据。
(2)移动端的表情数据是4个字节的字符。
(3)如果直接往采用utf-8编码的数据库中插入表情数据,Java程序中将报SQL异常。

三.解决方法

- 方案1

将数据库的编码格式修改为为utf8mb4(需要mysql升级到MySQL 5.5.3以上),utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。

指令:
(1)查看原有字段的字符集:

show full columns from 表名;

(2)修改字符集

alter table xxxxxxTableName convert to character set utf8mb4;

建议:后期建数据库直接建mb4编码格式。

- 方案2

在数据库已经不方便重新创建的情况下,可以选择将emoji表情进行转义,再保存到数据库中,取出展示时再转回。

此处选用了Hutool基于Emoji-java库提供的Emoji工具实现。

// 引入依赖
<dependency>
    <groupId>com.vdurmont</groupId>
    <artifactId>emoji-java</artifactId>
    <version>4.0.0</version>
</dependency>

1.转义Emoji字符

String alias = EmojiUtil.toAlias("😄");//:smile:

2.将转义的别名转为Emoji字符

String emoji = EmojiUtil.toUnicode(":smile:");//😄

参考文章

java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x98\x8B’ for column ‘a’ at row 1
Emoji工具-EmojiUtil
emoji-java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值