Laravel migrate - 列类型字符串不更新大小

Posted

技术标签:

【中文标题】Laravel migrate - 列类型字符串不更新大小【英文标题】:Laravel migrate - column type string doesn't update size 【发布时间】:2019-01-02 12:58:16 【问题描述】:

我创建了一个迁移来更新 mysql 中 VARCHAR 列的大小并在同一迁移中重命名它。因此,要通过 Laravel Schema 更改 VARCHAR() 类型,我们使用 string() 基于Laravel docs

这是 up() 函数:

Schema::table('address', function (Blueprint $table) 
    $table->string('place_id', 100)->change();
    $table->renameColumn('place_id', 'full_address');
);

还有函数down():

Schema::table('address', function (Blueprint $table) 
    $table->string('full_address', 255)->change();
    $table->renameColumn('full_address', 'place_id');
);

它正在重命名列但它没有改变大小,任何想法为什么?

MySQL 表

Field, table, Type, Character Set, Display Size
place_id,address,VARCHAR,utf8,255

提前谢谢你。

【问题讨论】:

“它不工作”到底是什么意思 您正在运行的php artisan ... 命令是什么? 我更新了问题。我正在运行php artisan migratemigrate:rollback。我不知道是否可以在同一迁移中更改大小并重命名列。 运行migrate 和运行migrate:rollback 之前的表格是什么样子的? 这对我很有帮助:Schema::defaultStringLength(191); 请参阅 ***.com/a/23786522/470749 和 laravel-news.com/laravel-5-4-key-too-long-error 【参考方案1】:

我找到了一个解决方案,我不确定它是否是最好的,但最好使用multiple Schemas

Schema::table('address', function (Blueprint $table) 
  $table->string('place_id', 100)->change();
);

Schema::table('address', function (Blueprint $table) 
  $table->renameColumn('place_id', 'full_address');
);

【讨论】:

以上是关于Laravel migrate - 列类型字符串不更新大小的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 4 中创建 Hstore 列类型?

php Laravel Migration将Null设置为exisiting列

Laravel:字符串数据,右截断:1406 列数据太长

有没有办法使用 Laravel 5 Migrations 创建一个 citext 字段?

将 created_at 列添加到迁移表 - Laravel

在 laravel 迁移中保存加密价格值