MySQL必须使用utf8mb4字符集否则emoji会因utf8mb3不支持4字节字符而被截断或报错需确保服务端、连接层、字段定义三者均为utf8mb4并注意索引长度限制与PHP编码设置。MySQL必须用utf8mb4字符集否则存不进emojiPHP本身能正常处理emoji字符串问题出在数据库连接和表结构上。只要MySQL服务端、连接层、字段定义三者中任一环还是utf8即utf8mb3emoji就会被截断成问号或空格甚至报错Incorrect string value。检查MySQL版本5.5.3才支持utf8mb4老版本要升级确认character_set_server和collation_server已设为utf8mb4和utf8mb4_unicode_ci建表时显式指定CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci别依赖默认值ALTER TABLE改已有表时必须同时改列、索引、连接编码漏一个都白改PHP连接MySQL时要显式设置charset为utf8mb4哪怕MySQL服务端配置对了PHP的PDO或mysqli连接默认仍可能走utf8导致传输过程把4字节emoji当非法字符丢弃。PDO连接加charsetutf8mb4到DSN里mysql:hostlocalhost;dbnametest;charsetutf8mb4mysqli连接后立刻执行$mysqli-set_charset(utf8mb4)不能只靠配置文件不要用mysql_query(SET NAMES utf8)——它只设utf8不是utf8mb4如果用Laravel等框架检查config/database.php里的charset和collation是否明确写了utf8mb4PHP内部处理emoji不需要特殊函数但要注意strlen和json_encodePHP 7.2原生支持UTF-8mb_*系列函数如mb_strlen能正确计数emoji但基础函数会出错。 文心快码 文心快码Comate是百度推出的一款AI辅助编程工具