mysql存储emoji表情的问题

问题

之前在做公司的项目的时候遇到过一个存储emoji表情(手机表情包)的问题,我做了一个评论系统,然后手机端提交的带有emoji表情的评论写入mysql的时候会被截断。 这个事情的原因是这样的,我使用了mysql的text类型存储评论内容,mysql使用的innodb,编码格式使用的utf8,然而emoji表情包使用的编码格式为utf8mb4,mysql存储时不认识这种编码格式,就会直接截断。 当时采用的解决方法是,app端发表的评论做一遍url编码加密,然后发给后台,读出数据时再解密。然而这种方式极大的增加了系统的复杂度,因为app才有emoji表情,所以只有app才加密发送,web端不加密,这样就要判断请求来至web端还是app端,同时由于我们的系统后台要做脏字过滤,后台在写入数据的时候就得解密过滤再加密写入数据库,感觉麻烦成狗了。

机缘

这两天在帮朋友做一个app,做了一版数据库设计,和一起做的小伙伴review的时候讨论到text和blob的区别的问题,text是识别编码格式的存储,blob是二进制的存储,这一下就然我想到了之前碰到的emoji表情的问题,卧槽,简直太他妈SB了,这么简单的事搞那么复杂,直接把text换成blob就可以存储emoji表情了,因为blob是二进制存储,不关心字符编码,读出来再转成string就好了,其实是很基本的问题,还是基本功不够扎实,要继续磨练

总结

还是要多做项目多积累经验,不同的项目碰到不同的问题,解决的问题又能推广到做每个项目中,这次帮朋友做app朋友承诺能给不少钱,但是我觉得这都不是最有价值的,最有价值的是找了个NB的小伙伴一起做,真心又学到不少东西,不管是技术上还是沟通交流和项目管理上,和牛人交流真实一件很开心的事。

Loading Disqus comments...
Table of Contents