mysql emojo 其他方案_Mysql存储Emoji的解决方案 | Database

Emoji表情字符已经是当下网络交流的标配了,如果你也想让你的网站或者App支持Emoji,那么在选择用Mysql作为后端存储时就需要格外注意一下了。

问题

一般情况下,在使用Mysql时候我们会选择UTF8这种字符,不过这种变长字符只支持存储1~3个字节的字符,而Emoji表情字符却是用4个字节来表示一个字符的。这样当你往数据库中写入带有emoji字符数据时会抛出异常,无法正确存储。

解决方案

如果是新项目,只要在建表的时候把字符编码集注意更换成支持4字节字符的utf8mb4就可以了。Mysql在5.5.3之后就支持utf8mb4这种字符集了。

另一种情况是,在遗留项目上做修改,这种情况稍微麻烦一些,还需要你对老数据做兼容,针对这种场景也有两个处理方案

方法一:

对要存储的文本在存储之前进行Base64编码,这样就不存在真正意义上的emoji了,不过繁琐的地方是在读取的时候还要进行相应的解码。这个可以在ORM层通过Hook来实现,算是个不错的变通方案。

方法二:

与方法一的扬汤止沸不同,方法二通过直接修改Mysql现有字符集为utf8mb4更像是釜底抽薪。修改编辑my.conf配置文件:

[client]

default-character-set = utf8mb4

[mysqld]

collation-server = utf8mb4_unicode_ci

character-set-server = utf8mb4

重启后,进入Mysql终端,执行show variables like 'char%';查看当前数据库字符集,同时为了兼容旧数据,还修改旧表的编码字符集为utf8mb4

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

这样就差不多了,不过其实还是有一些问题的比如索引长度767的限制,mysqldump默认字符集的问题,以及一些与ORM相关的读取写入问题,留在下篇写吧。

-待续-

你还可以看:

参考引用

0818b9ca8b590ca3270a3433284dd417.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值