直接原因是phpMyAdmin 5.1设计器依赖的phpmyadmin_designer_coords表缺失、结构不匹配、权限不足或字符集冲突,导致INSERT/UPDATE静默失败;需手动导入create_tables.sql、确认表存在且字段完整、检查用户权限及InnoDB引擎与utf8mb4校对一致性。
phpMyAdmin 5.1设计器布局保存失败的直接原因
根本不是设计器本身坏了,而是 phpmyadmin 5.1 的设计器(designer)依赖 phpmyadmin_designer_coords 这张表来持久化布局,而这张表默认不存在,或存在但字段结构不匹配、权限不足、字符集冲突——导致 insert/update 请求静默失败或报错。
常见现象包括:拖动完表位置后点「Save」没反应、刷新页面还原、控制台出现 INSERT INTO `phpmyadmin`.`phpmyadmin_designer_coords` 相关的 403 或 500 错误,或者 MySQL 错误提示 Table 'phpmyadmin.phpmyadmin_designer_coords' doesn't exist。
- 检查是否已创建
phpmyadmin系统库:它必须存在且由 phpMyAdmin 自动初始化;若手动删过或用空数据库安装,该库可能缺失 - 确认
phpmyadmin_designer_coords表是否存在:执行SHOW TABLES FROM `phpmyadmin` LIKE 'phpmyadmin_designer_coords'; - 若表存在,检查字段是否完整:至少需含
db_name、table_name、x、y、v、h字段;旧版迁移过来的表可能缺v/h(视图宽高),导致 INSERT 失败 - 验证当前登录用户对
phpmyadmin库是否有INSERT和UPDATE权限——仅SELECT不够
为什么新建的 phpmyadmin 库里没有 designer_coords 表?
phpMyAdmin 5.1 不会在首次访问设计器时自动建表,它只在执行 import_create_table.sql 脚本后生成全套系统表。这个脚本通常随安装包提供,但宝塔、Docker 或手动部署时容易遗漏。
标准路径是:/www/server/phpmyadmin/sql/create_tables.sql(宝塔环境)或 ./sql/create_tables.sql(源码安装)。但注意:该文件在 5.1 中默认不自动执行,必须手动导入。
- 用 phpMyAdmin 登录任意数据库 → 选中
phpmyadmin库 → 「导入」→ 上传create_tables.sql→ 执行 - 若提示「No database selected」,先确保左上角已切换到
phpmyadmin库(不是information_schema或其他) - 导入后检查
phpmyadmin_designer_coords表的ENGINE是否为InnoDB:MyISAM 在部分 MySQL 8.0+ 环境下已被禁用,会导致 INSERT 失效 - 别跳过
CREATE DATABASE IF NOT EXISTS `phpmyadmin` CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;这句——字符集不一致会引发Illegal mix of collations,尤其在创建用户或写入设计器坐标时
保存时返回空白或 500,但日志里没明显错误
这通常是 PHP 层面的静默失败:要么 mysqli 执行 INSERT 后没判断结果,要么触发了严格模式下的字段校验(如 x、y 字段被定义为 NOT NULL 但传入空字符串),要么 session 中断导致 token 校验提前失败。
支持从 AWS、阿里云、GCP、华为云、Azure 向腾讯云迁移的 Landing Zone 全流程客户端。通过远程 MCP Server 自动完成:扫描源云资源(5朵云13种资源)、AI智能填充调研问卷、生成设计文档、生成Terraform代码。当用户提到云迁移、Landing Zone、Terraform、扫...
立即学习“PHP免费学习笔记(深入)”;
- 打开
php.ini,确认display_errors = On且error_reporting = E_ALL,然后重现操作,看 PHP 错误日志(如/var/log/php-fpm/www-error.log)是否有mysqli_sql_exception或Undefined index - 检查
phpmyadmin/config.inc.php中是否误设了$cfg['Servers'][$i]['controluser']:如果用了控制用户但该用户无权写phpmyadmin库,设计器保存会直接失败且无提示 - 临时在
libraries/classes/Designer.php的 save() 方法开头加error_log("designer save called: " . print_r($_POST, true));,确认 POST 数据是否到达服务端 - 别忽略浏览器 Network 面板里
ajax.php?server=1&ajax_request=1&token=xxx&...&ajax_page=designer请求的 Response:有时返回 HTML 错误页而非 JSON,说明 PHP fatal error 已发生
设计器坐标保存了,但换浏览器或清缓存后又没了
这不是 bug,是预期行为:phpMyAdmin 5.1 的设计器布局默认按「数据库名 + 表名」维度存储,不绑定用户会话或账号。也就是说,只要 phpmyadmin_designer_coords 表里有对应记录,所有能访问该库的用户都能看到相同布局——但如果你用不同账号登录,或访问的是不同 MySQL 实例(比如本地 vs 远程),就看不到彼此的坐标。
真正容易被忽略的是:设计器坐标只对当前选中的数据库生效。比如你在 test_db 里设计了三张表的布局,切换到 prod_db 后,即使表名一样,也不会复用坐标——因为 db_name 字段值不同。
- 确认你每次都在同一个数据库上下文里操作设计器(左上角数据库列表是否始终选中目标库)
- 检查
phpmyadmin_designer_coords表中db_name字段值是否与当前数据库名完全一致(区分大小写,取决于 MySQL 的lower_case_table_names设置) - 不要指望「全局布局」:phpMyAdmin 5.1 没有跨库共享设计器状态的设计,每个库独立存储
- 如果需要多人协同维护同一套布局,只能靠定期导出/导入
phpmyadmin_designer_coords表数据,没有内置同步机制


















