emoji表情解决方案

记录一下:一个英文字母占位1个字节,一个汉字占位2个字节,一个字节8位(二进制)

回复帖子时,回复内容带有输入法中的表情时,无法成功回复
问题分析:通过fiddler抓包,找到回复评论的API:1.0/replycomment,当回复表情时,request和response数据如下:
这里写图片描述

结合API程序分析,推测是表情存入discuz_cn.pre_forum_post数据库时发生异常。
为了测试方便,在本机电脑的MySQL数据库中新建同样类型的数据库表(列名及类型也一样)如下所示:

这里写图片描述
这里写图片描述

执行插入操作:插入失败,报错信息如下所示:
这里写图片描述

初步判断是表情存入数据库时,发生异常。查阅资料分析发现:普通字符串或表情都是占位3个字节,而utf8每个字节最多3个字节,但是移动端的表情符号占位是4个字节,普通的utf8就不够用了。应该设置字符集为utf8mb4, 该字符集每个字节最多4个字节,刚好可以存储。
解决方案:修改相应的utf8字符集为utf8mb4
(1).修改表字段字符集为utf8mb4:
ALTER TABLE emoji MODIFY message TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
修改后,再执行插入命令依然报错。
(2).再去修改表字符集为utf8mb4:
ALTER TABLE emoji CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
修改后,再执行插入命令依然报错。
(3).再修改数据库的字符集为utf8mb4
mysql> set character_set_client= utf8mb4;
mysql> set character_set_connection= utf8mb4;
mysql> set character_set_database= utf8mb4;
mysql> set character_set_results= utf8mb4;
mysql> set character_set_server= utf8mb4;
插入数据库成功
这里写图片描述

这里写图片描述

‘message’字符集改为了utf8mb4.

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值