tl;dr

MySQL的utf8是残疾的,只支持utf8中三个byte的字符.解决方案:用utf8mb4,即可支持emoji.

可参考:https://mathiasbynens.be/notes/mysql-utf8mb4

UTF-8

MySQL中的utf8

MySQL中的utf8mb4

utf8升级到utf8mb4

总结

永远不要用MySQL中的utf8, 每次都用utf8mb4. 升级你的数据库或者代码可能会花上一些时间,但是这绝对是值得的. 为什么莫名其妙地限制数据库可以存储的字符集呢?为什么要在每次用户输入emoji的时候都丢失数据呢? 没有理由不支持完整的unicode. 做正确的事情,使用utf8mb4. 🍻