emoji mysql 乱码 php,解决Emoji存储MySQL乱码问题

在解决之前,得先说明一下为什么会出现乱码,Emoji表情占用4个字节,但是MySQL数据库UTF-8编码最多只能存储3个字节,就会导致存储不进去,在读取的时候读取不完整,导致乱码,那Unicode和UTF-8有什么区别呢?

总的就一句话,UTF-8是Unicode的一种实现。

Github解决方案地址:

一、如何解决Emoji存储问题

再来摘抄一遍自己的笔记:mysql 的 utf8编码的一个字符最多3个字节,但是一个emoji表情为4个字节,所以utf8不支持存储emoji表情。但是utf8的超集utf8mb4一个字符最多能有4字节,所以能支持emoji表情的存储。但是修改这个配置太繁琐了,容易出错,emoji-java这个库可以在代码段解决这个问题,解决思路:页面有一个表情😁,在经过处理之后可以是😄,将这个字符存入数据库

读取的时候可以将😄这个字符转为😁

例如: 😁 我可以存储为:smile:,😭存储为:cry:,等等,可以这样映射起来。

1、引入依赖

com.vdurmont

emoji-java

3.2.0

2、常用API@RequestMapping("/add/content")

public ResponseEntity insertContent(@RequestBody Content content) {

String title = content.getTitle();

String titles = EmojiParser.parseToAliases(title);

content.setTitle(titles);

Integer integer = emojiMapper.insertContent(content);

if (integer == 1) {

return ResponseEntity.ok().build();

}

return ResponseEntity.badRequest().build();

}

@RequestMapping("/get/{id}")

public Content getById(@PathVariable("id") Integer id) {

Content content = emojiMapper.selectById(id);

String title = EmojiParser.parseToUnicode(content.getTitle());

content.setTitle(title);

if (content != null) {

return content;

}

return null;

}EmojiParser.parseToAliases(string); 将表情符号转为字符

EmojiParser.parseToUnicode(string); 将字符转为表情符号

3、案例存储图片

数据库存储记录

查询该记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值