通常APP或者小程序,都会存在用户通过输入和系统进行交互,新增、修改、搜索数据的时候都会存在用户输入表情的问题,如果没有处理好就会出现线上bug,还不容易发现
移动端emoji表情的大小是4个字节(可以用专门的转码工具,将其转换为3字节存储),而一般在数据库设计的时候,初始化的字符集是utf8,占三个字节。当表情不做处理的时候存入或者读取数据库时,就会出现问题。知道原因之后,再解决这个问题就很好办了,解决方案有以下几种:
1、将emoji表情禁止输入:也就是说在前端页面控制,判断输入内容,如果是表情,则不让输入进去,从源头控制问题。弊端:不友好,禁止了用户的合理行为。
2、将emoji表情进行转码:转换为utf8格式的数据再存储,从过程去处理,也是没有问题的
3、设置数据库编码格式为utf8mb4格式:该编码为4个字节的utf8
- 将存储用户行为数据的字段设置成这个格式,其他的字段格式不变
- 将该表的编码格式设置为utf8mb4
- 将数据库的编码格式设置为utf8mb4
在移动端互联网高度发展的现在,推荐使用第三种方法,可以提前避免很多兼容性问题,向下兼容utf8
弊端:mysql数据库版本不能低于5.5.3,低于的没有这个类型