执行 php artisan admin:install 报 sqlstate[42000] 1071 错误,本质是 mysql 5.7 以下版本在 utf8mb4 下索引超长,需在 appserviceprovider::boot() 中添加 schema::defaultstringlength(191) 并回滚旧迁移后重试。

执行 php artisan admin:install 报 SQLSTATE[42000] 1071 错误
这是最典型的安装中断场景:命令卡在迁移阶段,报错信息里明确出现 Specified key was too long; max key length is 767 bytes 或类似字眼。本质是 MySQL 5.7 以下版本对 UTF8MB4 字符集下索引长度限制过严,而 Laravel 默认建表用的是 utf8mb4_unicode_ci,email 字段加唯一索引时超长。
解决方式不是改数据库配置项,而是统一收口到 Laravel 的 Schema 层:
- 打开
app/Providers/AppServiceProvider.php - 在
boot()方法开头加入Schema::defaultStringLength(191); - 确保已
use Illuminate\Support\Facades\Schema; - 再运行
php artisan admin:install,不再报该错
注意:如果项目已存在迁移文件(比如 create_users_table),需先 php artisan migrate:rollback 清掉旧表,否则新规则不生效。
composer require encore/laravel-admin 卡住或报依赖冲突
常见现象是终端长时间无响应、提示 could not resolve packages,或明确报出 Conclusion: don't install laravel/framework v9.x 类型的冲突。根本原因通常是镜像源未切国内、PHP 版本不匹配,或 Composer 缓存污染。
按顺序排查:
- 执行
composer clear-cache清掉本地缓存 - 切阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 确认 PHP 版本 ≥ 7.3(Laravel Admin 1.8+ 要求),运行
php -v核对 - 检查
composer.json中"laravel/framework"版本是否与目标encore/laravel-admin兼容(例如 Admin 1.8.x 对应 Laravel 6–8,Admin 2.x 才支持 Laravel 9+)
若仍失败,可临时指定兼容版本安装:composer require encore/laravel-admin:"1.8.*",避免 Composer 自动选高版本引发冲突。
执行 php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider" 后没生成 config/admin.php
命令看似成功但实际没输出任何文件,多半是 Provider 名称拼错或包未真正加载。尤其容易漏掉命名空间里的反斜杠或大小写错误。
验证和修复步骤:
- 先确认
composer show encore/laravel-admin能列出已安装包(而非Package not found) - 检查
config/app.php的providers数组里是否手动注册了Encore\Admin\AdminServiceProvider::class(新版 Laravel 不强制要求,但老项目可能需要) - Provider 名称必须严格匹配——注意是
Encore\Admin\AdminServiceProvider,不是Encore\Admin\AdminServiceProvder(少个 i)或encore\admin\AdminServiceProvider(小写) - 如仍无效,加
--force参数重试:php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider" --force
这个步骤一旦跳过,后续 admin:install 会因读不到配置而失败,但错误提示往往不直观,容易误判为数据库问题。
Nginx 下访问 /admin 返回 404
不是 Laravel 路由没生效,而是 Nginx 没把请求正确转发给 index.php。典型表现是首页能打开,但后台路径全 404,且日志里没有 PHP 错误,只有 Nginx 的 404 记录。
关键要改 Nginx 配置中的 location / 块,确保它包含 Laravel 标准的重写规则:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
特别注意:
- 不要只写
try_files $uri /index.php;—— 缺少$query_string会导致路由参数丢失 - 确认
root指向的是public/目录,不是项目根目录 - 修改后必须执行
lnmp nginx restart或nginx -s reload,不能只重启 PHP-FPM
这个配置点极容易被忽略,尤其是用 lnmp1.6 一键包部署时,默认 vhost 配置里常缺这一行,查日志也看不出端倪,纯属 Nginx 层面的转发遗漏。











