emoji表情解决方案

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

回复帖子时,回复内容带有输入法中的表情时,无法成功回复
问题分析:通过fiddler抓包,找到回复评论的API:1.0/replycomment,当回复表情时,request和response数据如下:
emoji表情解决方案_第1张图片

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

emoji表情解决方案_第2张图片
emoji表情解决方案_第3张图片

执行插入操作:插入失败,报错信息如下所示:
emoji表情解决方案_第4张图片

初步判断是表情存入数据库时,发生异常。查阅资料分析发现:普通字符串或表情都是占位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;
插入数据库成功
emoji表情解决方案_第5张图片

emoji表情解决方案_第6张图片

‘message’字符集改为了utf8mb4.

emoji表情解决方案_第7张图片

你可能感兴趣的:(emoji表情解决方案)