一次性搞懂MySQL如何存储emoji表情


作为服务器开发人员,我们经常会遇到emoji存储问题。比如微信授权登录时,用户的昵称就有可能包含emoji表情。如果设置不当就有可能因为昵称字段无法写入数据库导致用户注册失败。


MySQL存储emoji表情必须条件


MySQL存储emoji表情的字段必须是utf8mb4编码格式
注意这里是utf8mb4不是utf8,MySQL的utf8存储时用的是3个字节,但是emoji是4个字节,而utf8mb4也是4字节,所以字段才需要改成utf8mb4


对应的表也应该设置成utf8mb4编码格式
现在我们已经知道了MySQL需要的条件,我就可以根据条件对标进行修改。


第一步:将表中字段设置成utf8mb4编码格式:
ALTER TABLE 表名称 MODIFY ` 字段名` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
第二步:将表的编码格式设置成utf8mb4


ALTER TABLE 表名称 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
上述SQL中我们使用了utf8mb4_general_ci,你也许在别的地方看到utf8_bin或者是utf8_unicode_ci。这几个又有什么区别呢?


utf8mb4_bin区分大小写,utf8mb4_unicode_ci比较准确,utf8mb4_general_ci速度比较快。通常情况下 utf8mb4_general_ci的准确性也够我们用的了


设置客户端编码格式
注意了这里说的是客户端,客户端可以是MySQL的cli模式下的命令行,也可以是PHP连接器。如果我们使用的是PHP操作MySQL数据库,那PHP就是客户端。如果我们使用了框架,那我们可以修改框架配置文件,将MySQL的charset选项设置成utf8mb4即可


如果是MySQL的cli模式,我们可以使用SQL设置当前编码格式:
set names utf8mb4;
如果不想修改PHP代码,又想MySQL支持emoji表情存储,我们还可以修改MySQL的配置文件,也就是全局设置,强制使用utf8mb4。具体配置如下:


[client]  
default-character-set=utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]  
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
最后记得重启MySQL:service mysqld restart
分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS