MySQL 中如何存储 emoji ?
问题还原 使用 erlang 存储一些特殊字符串到 MySQL 的时候,却没法读出来。经检查,这些字符串的二进制格式如下: <<240,159,152,134,240,159,152,144>> 查看二进制的 unicode 是什么? 14> unicode:characters_to_list(<<240,159,152,134,240,159,152,144>>). [128518,128528] 15> erlang:integer_to_list(128518,16).%%查看十六进制 "1F606" 16> erlang:integer_to_list(128528,16). "1F610" 明显,1F606 和 1F610 超过了常见 unicode 字符串 0000-FFFF 的表达范围。 1F606 和 1F610 代表什么? 根据 unicode 官网上的说明,这是一种 emoji(表情符号),具体的展示形式与厂商有关。 MySQL 上存储失败的原因 目前来说,多数 MySQL 都是以 utf8 存储,注意 MySQL 的 utf8 和我们所说的传统 utf8 有点区别。MySQL 的 utf8 编码规定了最多只能有 3 个字节,而 emoji 的 unicode 已经超过了 3 个字节,因此 MySQL 的 utf8 无法识别与存储 emoji。 为此可以查阅