编码首选utf8mb4,它能支持所有 Unicode 字符,解决特殊字符存储乱码问题

2026-02-01

先明确:emoji 的编码特性

emoji 表情属于 Unicode 字符,它的编码长度是4 个字节,而我们之前提到的 MySQL 原生utf8最多只支持 3 个字节,所以如果用utf8编码,emoji 会被截断、存储为?或者乱码;而utf8mb4支持 4 个字节编码,正好可以完整容纳 emoji,实现正常存储和显示。


先搞懂:为什么不选utf8,要选utf8mb4?

MySQL 里的utf8是一个 "伪 UTF-8":

它最多只支持3 个字节的 UTF-8 编码,无法存储一些特殊字符(比如 emoji 表情、部分生僻汉字、韩语特殊字符、数学符号等)。

而utf8mb4是完整的 UTF-8 编码,支持4 个字节的字符,能够覆盖所有 Unicode 字符,解决了特殊字符无法存储、存储后变成?或乱码的问题。

两者在性能上几乎没有差异,utf8mb4的兼容性和完整性远超utf8,没有理由不选择它。


mysqli:设置连接编码为utf8mb4(必须在执行查询前设置)

mysqli_set_charset($conn, "utf8mb4");

PDO:在DSN中指定编码为utf8mb4(charset=utf8mb4)

$conn = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8mb4", $username, $password);


创建数据库和数据表时,必须指定编码为utf8mb4,排序规则推荐utf8mb4_unicode_ci(兼容性更好)。

版权所有:镇江小蚂蚁信息科技有限公司
  • 拨打电话
  • 发送短信