phpMyAdmin 显示问号或方块的根源是 MySQL 服务端默认字符集不支持中文(如 latin1),需修改 my.cnf 中 character-set-server = utf8mb4 并重启;同时配置 phpMyAdmin 的 charset 和 connection_charset 为 utf8mb4,PHP default_charset 设为 UTF-8,旧数据须先用 HEX() 判定真实编码再精准转换,语言包须用合法 JSON 格式且启用 json 扩展。
php
MyAdmin 页面显示问号或方块:检查 MySQL 服务端默认字符集
乱码最常见原因不是
phpmyadmin
本身,而是 mysql 服务启动时用的默认字符集不支持中文(比如
)。即使你在 phpmyadmin 里选了“简体中文”,如果底层连接和表默认用的是
,照样显示为 或乱码。
登录 MySQL 命令行,执行
,重点看
和
如果
是
,需修改 MySQL 配置文件(如
或
),在
下添加:
重启 MySQL 服务后,再进 phpMyAdmin,新建数据库/表时默认就是
,旧表需手动转换(见下一条)
phpMyAdmin 连接后仍乱码:确认连接层字符集设置
phpMyAdmin 默认用
初始化连接,但若 MySQL 服务器不支持
(MySQL 8.0+ 默认禁用
别名),这条命令实际设成了
,导致 emoji 或部分生僻字存取异常。
打开 phpMyAdmin 配置文件
,找到
,设为:
同时确保
也设为
(PHP 7.4+ 推荐显式指定)
如果使用 Nginx/Apache,确认 PHP 的
在
中是
(注意连字符,不是
)
旧数据乱码无法修复:别直接 ALTER TABLE CONVERT TO CHARSET
用
粗暴转换,常把已损坏的
编码数据二次转错,变成不可逆乱码。必须先确认当前字段真实编码状态。
查字段内容是否真乱码:用
,如果返回类似
(UTF-8 编码的“中文”),说明数据本身是 UTF-8,只是被当
解释了——此时只需改列声明:
如果
返回的是
这类双字节,大概率是原
或
存的,需先导出、用 iconv 转码、再导入
phpMyAdmin 界面里点“操作 → 排序规则”,只改排序规则不改字符集,不会修复乱码;必须同步改字符集声明
语言包没生效:别动
目录里的 .php 文件
很多人把下载的语言包解压到
就以为完事了,但 phpMyAdmin 7.0+ 强制要求语言包是 JSON 格式且必须启用
扩展,
后缀的语言文件已被废弃。
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
确认 PHP 已启用
模块:
语言包路径必须是
(不是
或
),文件内容格式要合法 JSON(字符串必须双引号,末尾不能有逗号)
在
中明确指定:
,不要留空或写成
浏览器缓存可能让旧语言界面残留,强制刷新(Ctrl+F5)或清空 phpMyAdmin 的 session 数据(删
目录下相关文件)
字符集问题从来不是单点配置能解决的,从 MySQL server、连接层、表结构、字段定义到 phpMyAdmin 自身语言加载,五层链路上任何一环掉链子,都会表现为页面乱码。最容易被跳过的其实是连接层的
和旧数据的真实编码判定——这两处一错,后面全白调。
立即学习
“
PHP免费学习笔记(深入)
”;
latin1latin1SHOW VARIABLES LIKE 'character_set%';character_set_servercollation_servercharacter_set_serverlatin1/etc/mysql/my.cnf/etc/my.cnf[mysqld][mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ciutf8mb4SET NAMES utf8utf8utf8utf8mb3config.inc.php$cfg['Servers'][$i]['charset']$cfg['Servers'][$i]['charset'] = 'utf8mb4';$cfg['Servers'][$i]['connection_charset']'utf8mb4'default_charsetphp.iniUTF-8utf8ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4latin1SELECT HEX(column_name) FROM table_name LIMIT 1;E4B8ADE69687latin1ALTER TABLE table_name MODIFY column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;HEX()C4E3BAC3gbklatin1language./lang/zh.jsonjson.phpjsonphp -m | grep json./lang/zh.jsonzh_CN.jsonzh.phpconfig.inc.php$cfg['Lang'] = 'zh';'zh_CN'tmp/connection_charset