phpMyAdmin“字符集冲突”源于连接层utf8与MySQL 8.0+ utf8mb4默认配置不一致,需统一设置charset为utf8mb4、collation-server为utf8mb4_unicode_ci,并在导出时手动选utf8mb4编码。
wordpress 6.4 本身不会在 phpmyadmin 中触发“字符集冲突”错误——这个提示实际来自 mysql/mariadb 的严格模式校验,根源是 phpmyadmin 连接时声明的字符集与服务器端默认配置不一致,尤其在 utf8mb4 兼容性细节上容易卡住。
phpMyAdmin 连接层用 utf8 初始化,但 MySQL 8.0+ 已弃用 utf8 别名
WordPress 6.4 默认要求 DB_CHARSET = 'utf8mb4',但 phpMyAdmin(尤其旧版)在建立连接时仍可能执行 SET NAMES utf8。MySQL 8.0+ 默认将 utf8 视为 utf8mb3,而 utf8mb4 表需要显式声明。若服务器 character_set_server 是 utf8mb4,但连接层设成 utf8,就会出现「client/connection/results 不一致」,phpMyAdmin 有时会报“字符集冲突”或静默降级。
- 检查当前连接状态:在 phpMyAdmin SQL 栏执行
SHOW VARIABLES LIKE 'character_set%';,确认character_set_client、character_set_connection、character_set_results三项是否全为utf8mb4 - 修改 phpMyAdmin 配置:打开
phpEnv\phpmyadmin\config.inc.php,在$cfg['Servers'][$i]['auth_type'] = 'cookie';后添加:$cfg['Servers'][$i]['charset'] = 'utf8mb4';$cfg['Servers'][$i]['connection_charset'] = 'utf8mb4'; - 避免覆盖:确保没有其他地方(如 Apache/PHP 的
default_charset)强制设为utf8或空值
WordPress 数据库表使用 utf8mb4,但 phpMyAdmin 导出/导入时 fallback 到 latin1
即使页面显示正常,phpMyAdmin 的导出逻辑在未显式指定编码时,会按连接层当前 charset 决定 SET NAMES 语句。如果连接层被意外设为 latin1(比如语言选了 zh-gb2312),导出的 .sql 文件开头就是 SET NAMES latin1,后续导入到新环境就直接触发字符集冲突警告。
- 导出时必须选「自定义」→ 展开「Format-specific options」→ 在「Export character set」下拉框中手动选
utf8mb4 - 不要勾选「Save as file」就跳过编码选项;哪怕只导结构,也要确保该下拉框不是灰色或空值
- 如果导出后文件开头仍是
SET NAMES latin1,说明 phpMyAdmin 没读取到连接层设置,需回查config.inc.php中$cfg['Servers'][$i]['charset']是否生效(重启 Apache/MySQL 服务)
MySQL 服务端 collation_server 不匹配 utf8mb4_unicode_ci
WordPress 6.4 创建的新表默认用 utf8mb4_unicode_ci 排序规则,但如果 MySQL 的 collation_server 是 utf8mb4_general_ci 或更老的 utf8mb4_0900_ai_ci(MySQL 8.0.31+),某些联合查询或索引操作在 phpMyAdmin 界面执行时,可能因排序规则隐式转换失败而报“字符集冲突”。
使用tbot机器ID身份文件配合tsh CLI,通过Teleport访问控制SSH登录托管主机或执行远程命令。
- 执行
SHOW VARIABLES LIKE 'collation_server';,如果不是utf8mb4_unicode_ci,需在 MySQL 配置文件(my.ini或my.cnf)的[mysqld]段落添加:collation-server = utf8mb4_unicode_ci - 注意:仅改
character-set-server不够,collation-server必须同步,否则新建数据库仍可能继承错误 collation - 改完必须重启 MySQL 服务,且已有数据库需手动执行
ALTER DATABASE dbname CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
真正容易被忽略的是:phpMyAdmin 的「语言」选择会悄悄覆盖连接字符集。选 Chinese simplified (zh-utf-8) 才走 utf8mb4 路径;选任何带 gb2312、gbk 或没后缀的 zh,它都会发 SET NAMES gb2312,哪怕你 config.inc.php 里写死了 utf8mb4 —— 这个覆盖行为发生在连接建立之后,优先级更高。
立即学习“PHP免费学习笔记(深入)”;


















