在 MySQL 内, 你的表和客户端编码都需要使用 utf8mb4
编码, 才可以解决 Emoji 表情符号的问题, 即:
- 你的表的字符集得是
utf8mb4
(不能是 utf8
), 至于排序规则 (collation) 是 utf8mb4_bin
还是 utf8mb4_general_ci
等等都关系不大, collation 仅影响到排序
- 客户端的会话你可以显式用
set names utf8mb4
进行初始化
这个问题的原因是你的表在使用 utf8
字符集, 而 MySQL 中的 utf8
字符集实现不完整, 不支持 4 个字节的 utf8 标准的字符, 但是考虑到兼容性, 不能直接在 utf8
上改动(因为影响到预分配空间的大小问题), 所以他们后续出了 utf8mb4
的字符集来解决这个问题
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…