根本原因是MySQL默认utf8仅支持3字节编码,无法存储4字节Emoji;必须将数据库、所有WordPress表(如wp_posts、wp_comments)及字段(如post_content)统一设为utf8mb4字符集和utf8mb4_unicode_ci排序规则,并确保phpMyAdmin连接也使用utf8mb4。
WordPress 表情(Emoji)保存失败,根本原因是 MySQL 默认字符集不支持 4 字节 UTF-8 字符(如 ?、??),而 phpMyAdmin 只是操作界面——真正要改的是数据库和表的字符集与排序规则。直接在 phpMyAdmin 里点几下就能修好,但顺序和细节错一个就白忙。
WordPress 5.0+ 要求数据库使用 utf8mb4,不是旧的 utf8(后者只支持最多 3 字节,无法存 Emoji)。登录 phpMyAdmin 后,先选中你的 WordPress 数据库,点击「操作」页签:
utf8mb4_unicode_ci 或 utf8mb4_0900_ai_ci,而不是 utf8_general_ci
utf8_*,说明数据库层面还没升级,不能只改表WordPress 有十几张表(wp_posts、wp_comments 等),其中 wp_posts.post_content 和 wp_comments.comment_content 是 Emoji 主要落点。在 phpMyAdmin 中:
wp_posts、wp_comments、wp_postmeta)utf8mb4_unicode_ci
VARCHAR、TEXT 等)的字符集wp_options,否则主题/插件设置里的 Emoji 也会乱码某些老迁移的表里,post_content 字段可能是 LONGTEXT,但排序规则仍为 utf8;更隐蔽的问题是:如果字段定义写死为 TEXT CHARACTER SET utf8,即使表升级了也不生效。
wp_posts 表 → 「结构」页签post_content 字段,看「排序规则」列,必须是 utf8mb4_unicode_ci
utf8mb4_unicode_ci,保存post_title、post_excerpt —— 标题里加 Emoji 也会失败即使数据库和表都对了,如果 phpMyAdmin 连接时没声明 utf8mb4,插入/编辑时仍可能截断或转成问号。
config.inc.php
$cfg['Servers'][$i]['charset'] = 'utf8mb4';
$cfg['Servers'][$i] 配置块内,重启 Web 服务(或清浏览器缓存)SHOW VARIABLES LIKE 'character_set%';,确认 character_set_client、character_set_connection、character_set_results 全是 utf8mb4
改完后,务必用真实 Emoji(比如复制 ? 到文章编辑器发布)测试,不要只看 phpMyAdmin 里能否手动插入——WordPress 的 wp_insert_post() 会二次过滤,只有全链路(PHP 连接 + MySQL 配置 + 表结构 + 字段定义)都是 utf8mb4 才算真正通了。