评论和文章里的表情从旧站导过来全变成问号 中文倒是正常 在编辑器重新输入一个表情 保存后又被截断。日志里能对上时间点,这种反而好排。
旧表是 utf8 三字节字符集 存不下四字节的 emoji 导入时被替换成了问号 新表虽然是 utf8mb4 连接字符集没跟着改 写入还是按三字节处理。这一点先确认清楚,后面就不用反复试。
SHOW CREATE TABLE wp_comments\G ALTER TABLE wp_comments CONVERT TO CHARACTER SET utf8mb4; wp db query 'SHOW VARIABLES' | grep character_set
「utf8mb4 表情丢失」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
别只看报错的最后一行,往上看几行,真正的起因通常在上面。
处理上按这个顺序:先确认表和字段的字符集 SHOW CREATE TABLE 看是不是都已经用到 utf8mb4 各层统一;把数据库 表 字段三层都转成 utf8mb4 连接串和客户端也加上 charset=utf8mb4;已经变成问号的内容没法还原 只能从旧站原文重新导一遍。
结果对不对很好判断,新发的带表情评论能正常保存 刷新后显示的还是表情不是问号。
