Laravel 5 | Migration Alter-Change Column 花了很长时间

Laravel 5 | Migration Alter-Change Column took so long

在我的用户中table获得了数百万的数据.....

并且我执行此迁移以更改列 my_data...

上的默认值
Schema::table('users', function (Blueprint $table) {
    $table->string('my_data')->default(0)->change();
});

我在query_log.txt中看到,php artisan migrate会执行这个查询

ALTER TABLE gn_users CHANGE my_data my_data VARCHAR(255) DEFAULT '0' NOT NULL

这很慢,几乎 1 小时仍未完成迁移...

.

.

然后,我停止迁移,我直接 运行 原始查询(我使用 ALTER ... ALTER 而不是 ALTER ... CHANGE

ALTER TABLE gn_users ALTER my_data SET DEFAULT '0'

并且这个查询仅在几秒钟内完成...

.

.

所以,我的问题是,如何确保 Laravel 运行 ALTER ... ALTER 而不是 ALTER ... CHANGE

很可能是因为 Laravel 在 SQL 中使用的 CHANGE 命令主要用于重命名列、更改数据类型。

但是 ALTER 列在这种情况下更有用,因为它更适合设置或更改默认值。

(来源:https://hoelz.ro/ref/mysql-alter-table-alter-change-modify-column

可能Laravel正在使用变化,因为它最适合变化,可以普遍使用,使用最广泛;通过文档搜索,不幸的是找不到强制 ALTER 命令而不是 CHANGE.

的具体方法

为了确保正确的命令是 运行 并强制执行正确的命令,您始终可以使用 DB facade 的方法执行原始查询 – DB::statement("ALTER db ALTER col...")

最好始终仔细检查构建者将要执行的命令 运行 以及这些命令是否对案例有效且有效,因为它们无法始终预测最佳方式,您的案例就是一个很好的例子。