开发过程遇到的坑-Emoji表情

这是在开发过程中遇到的坑,在公司做的是移动考勤系统,有次收到运营从客户那里收集来的反馈,用户在提交补考勤的时候失败。当我听到这个消息的时候不敢相信,因为系统用了这么久,第一次有用户反馈这样的问题。等我看了用户的截图的时候我敏锐地看到了用户输入了很多emoji表情,于是我看看错误日志,结果是插入带有emoji表情的那段话插入数据库失败,找到失败的来源,我就开始动手来解决了。

首先我到网上查了有关Emoji的内容,以下内容是我收集并归纳而来,也感谢互联网各位爱分享的同仁:

Emoji字符是Unicode字符集中一部分,Unicode是一种字符编码方法,它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。我们所知道的UTF-8、UTF-16等编码, 是对Unicode的不同实现方式。虽然之前也对Unicode进行过了解,但是乘着这个机会再对字符编码的知识做个总结,有关字符编码的知识个人觉得有位博主的文章写的很精彩,所以直接借用该博主的文章,一来是为了自己可以随时翻看,二来也向那些还不怎么清楚字符编码相关内容的同仁推荐。

阮一峰的博客:字符编码比较:ASCII、Unicode和UTF-8


解决Emoji表情字符存储失败的方法(亲测可用):

数据库使用的是Mysql

可以将数据库或者对应表的字符集改为utf8mb4即可,即CHARSET=utf8mb4

至于为什么不用UTF-8,是因为UTF-8只支持最长三个字节的 UTF-8字符,而Emoji超过了三个字节,所以需要使用能支持超过三个字节的UTF-8的字符(相当于之前设计数据库没有考虑到后面会出来Emoji来)。

具体的操作步骤如下:

查看MySQL支持的所有字符集
mysql> show charset;
查看某张表当前的字符集

mysql> show create table 表名;

以下任取一或两个都取即可(创建时)

创建默认字符集为utf8mb4的数据库.在该数据库中,如果创建表时是不指明字符集,则默认utf8mb4
mysql> create database default charset utf8mb4;
创建字符集为utf8mb4的表, 数据库的默认字符集非utf8mb4也没问题

mysql> create table 表名 (列名, 列名, ...) DEFAULT CHARSET=utf8mb4;

以下任取一或两个都取即可(更新时)

修改已存在的数据库的字符集
mysql> alter database 数据库名 default charset = utf8mb4;
修改已存在的表的字符集

mysql> alter table 表名 default charset = utf8mb4;


如果遇到需要大量修改MySQL字符集的重复工作, 这里介绍一个生成"批量修改字符集语句"的方法, 对输出复制粘贴即可

mysql> SELECT CONCAT('alter TABLE ',TABLE_NAME,' default charset utf8mb4;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=数据库名 AND TABLE_TYPE='BASE TABLE';

输出内容如:

alter TABLE test default charset utf8mb4;


至此,有关Emoji表情的坑就介绍到这里,使用过程中还需要和前端调试,不仅是成功存入数据库中,而且当从数据库中取出数据能够在前端展示给用户。


你可能感兴趣的:(数据库)