问题的症结在于,MySQL的“utf8”实际上不是真正的UTF-8 简单概括如下 那么什么是编码?什么是UTF-8? MySQL简史 不过我可以试着猜测一下 为什么这件事情会让人如此抓狂 总结 --- 最近我遇到了一个bug,我试着通过Rails在以“utf8”编码的MariaDB中保存一个UTF-8字符串,然后出现了一个离奇的错误: Incorrect string value: ‘\xF0\x9F\x98\x83 <…’ for column ‘summary’ at row 1 我用的是UTF-8编码的客户端,服务器也是UTF-8编码的,数据库也是,就连要保存的这个字符串“😃”也是合法的UTF-8。 问题的症结在于,MySQL的“utf8”实际上不是真正的UTF-8 “utf8”只支持每个字符最多三个字节,而真正的UTF-8是每个字符最多四个字节。 MySQL一直没有修复这个bug,他们在2010年发布了一个叫作“utf8mb4”的字符集,绕过了这个问题。 当然,他们并没有对新的字符集广而告之(可能是因为