为了更加美观和醒目,我在 WordPress 网站菜单中使用了 emoji(效果见下图)。然而今天修改保存菜单时,发现凡是菜单名称中包含 emoji 的,保存时全都报错:“无法在数据库更新文章”。更要命的是,这些带 emoji 的菜单全都丢失了。由于正好都是一级主菜单,导致原来的子菜单项目全都平铺展开,彻底凌乱了…… 所幸数据一直有备份,恢复数据库后,菜单也恢复了。

后来联想到,最近刚把 MySQL 从 5.x 升级到 8.0,猜想是不是因为数据库字符集和排序规则不兼容所致。然后就到 WordPress 后台 - 工具 - 站点健康 - 信息,查看数据库情况,结果显示:
数据库字符集 utf8mb4 数据库排序规则 utf8mb4_unicode_520_ci
再到 WordPress 根目录下,检查wp-config.php文件中的设置,显示:
define( 'DB_CHARSET', 'utf8mb4' ); define( 'DB_COLLATE', '' );
PS. DB_COLLATE 默认值就是空字符串(继用 MySQL 的排序规则)
既然上述两个设置都没有问题,那可能就是数据库文件本身的问题了!
一、登录宝塔面板 - 数据库 - 管理(打开 phpMyAdmin)- 点击选择 WordPress 数据库(例如本站为www_1itao_com)- 点击顶部导航栏的 “操作”按钮 - 在页面中找到“排序规则”部分。
然后选择utf8mb4_unicode_ci(选择此项更为通用,而根据站点信息提示,本站选择的是utf8mb4_unicode_520_ci)

默认只勾选了第一项“更改所有表排序规则”,小白同时勾选了“更改所有表列的排序规则”,之后点击“执行”按钮,之后再尝试保存带有 emoji 的菜单名称,发现已经正常了!
二、如果经过第一步依然无法正常存储 emoji 符号,则进行此步骤(否则可忽略)
登录宝塔面板 - 软件商店 - 已安装 - MySQL - 设置 - 配置文件
依次在配置文件中搜索查找[]部分内容,然后在其下方添加相应代码:
[client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4'
添加保存后,点击:Mysql 服务 - 重启,然后看看效果,不行再重复执行第一步。
重要提示: 操作前请务必对网站和数据库进行完整备份,以免数据损坏或丢失。


评论0