根本原因是mysql服务端默认引擎为myisam且字符集为latin1,导致laravel-admin迁移时外键失效、事务不支持;必须在my.cnf中设default-storage-engine=innodb、character-set-server=utf8mb4,并在迁移闭包内显式设置$table->engine='innodb'、$table->charset='utf8mb4'、$table->collation='utf8mb4_unicode_ci'。

为什么 laravel-admin 安装时迁移总报错?
根本原因不是 laravel-admin 本身有问题,而是它依赖的表被 MySQL 用 MyISAM 引擎建出来了——外键、事务、全文索引全失效,php artisan admin:install 执行到中间就卡住或静默失败。你看到的错误可能是 SQLSTATE[HY000]: General error: 1005 Can't create table,也可能是没报错但登录页打不开,因为 admin_users 表虽然存在,却无法关联角色或权限。
检查 MySQL 当前默认引擎和字符集
别猜,直接进 MySQL 终端验证:
SHOW VARIABLES LIKE 'default_storage_engine';
SHOW VARIABLES LIKE 'character_set_server';
如果返回值是 MyISAM 或 latin1,说明服务端配置已锁定,Laravel 迁移里写的 $table->engine = 'InnoDB' 会被无视——这是绝大多数安装失败的起点。
laravel-admin 迁移文件里必须显式设 InnoDB 和 utf8mb4
laravel-admin 的迁移文件(如 2016_01_01_000000_create_admin_tables.php)默认不写引擎和字符集,得手动补上:
-
$table->engine = 'InnoDB';必须放在Schema::create()的闭包内部 -
$table->charset = 'utf8mb4';和$table->collation = 'utf8mb4_unicode_ci';必须同时出现,只设 charset 不生效 - 若已跑过失败的 install,先清空
migrations表 + 手动删掉所有admin_*表,再重试
MySQL 配置文件必须改,且重启后要验证
光改 Laravel 代码不够,MySQL 服务本身得认这个配置:
- 编辑
/etc/my.cnf(Linux)或my.ini(Windows),在[mysqld]段落下加三行:default-storage-engine = InnoDBcharacter-set-server = utf8mb4collation-server = utf8mb4_unicode_ci - 重启服务:
sudo systemctl restart mysql - 重启后立刻再执行那两条
SHOW VARIABLES,确认返回值是InnoDB和utf8mb4——否则后续所有操作都是白忙
很多团队卡在“改了配置但没重启”或“改了错的配置文件”(比如改了 ~/.my.cnf 而非系统级 /etc/my.cnf),导致反复重装 laravel-admin 却始终失败。











