laravel安装后php artisan migrate失败主因是环境、配置或迁移机制未对齐,常见于数据库连接未通、数据库不存在或权限不足、迁移文件命名/路径错误、migrations表状态与物理表不一致、外键字段类型或创建顺序不合规、索引长度超限等。

Laravel 安装完成后执行 php artisan migrate 报错,通常不是框架没装好,而是数据库环境、配置或迁移逻辑没对齐。问题多卡在“命令能跑,SQL 却没执行成功”这一步。下面说几个最常踩的坑和对应解法。
数据库连接根本没通
.env 文件看着配对了,但 Laravel 实际没读到:
- 确认文件名是 .env(不是 .env.bak、.env.example 或带空格)
- 改完 .env 后必须运行
php artisan config:clear,否则缓存旧配置 - 用
php artisan tinker输入config('database.connections.mysql.host'),看输出是否是你填的值,而不是 127.0.0.1 或空字符串 - Docker/WSL 环境下,
DB_HOST=localhost是错的——应填容器服务名(如mysql)或宿主机 IP(如172.17.0.1)
数据库不存在或权限不够
Laravel 不会自动建库,只操作你指定的库:
- 登录 MySQL:
mysql -u root -p,执行SHOW DATABASES;,确认DB_DATABASE的值真实存在 - 若不存在,手动创建:
CREATE DATABASE `my_app` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;(注意反引号,尤其库名含短横线时) - 确保
DB_USERNAME对该库有CREATE、ALTER、INSERT权限,不能只有SELECT
迁移文件没被识别或状态混乱
出现 “Nothing to migrate” 却明明加了新文件?大概率是:
- 文件没放在
database/migrations/目录下 - 文件名格式错误:必须是
YYYY_MM_DD_HHMMSS_create_posts_table.php,不能用短横线、中文、空格 - 类名不匹配:
class CreatePostsTable extends Migration必须和文件名前缀一致 -
migrations表里已有记录,但对应物理表没建(比如之前连错库执行过迁移),此时 migrate 会跳过——用php artisan migrate:status查 batch 值,再进数据库查SELECT * FROM migrations ORDER BY id DESC LIMIT 3;核对是否匹配
外键或字段定义触发 MySQL 限制
Laravel 10 默认启用严格模式,MySQL 报错 errno: 150 或 1215 很可能源于:
- 外键字段类型不一致:主表
id()→BIGINT UNSIGNED,子表user_id必须用unsignedBigInteger(),不能用integer() - 引用表还没创建就加外键:确保
users表迁移时间戳早于posts表 - 字符集不统一:检查
config/database.php中 MySQL 连接是否明确设置'charset' => 'utf8mb4'和'collation' => 'utf8mb4_unicode_ci' - 索引长度超限(报错
1071 Specified key was too long):在AppServiceProvider::boot()中加Schema::defaultStringLength(191);,并确保已引入use Illuminate\Support\Facades\Schema;











