【问题标题】:How to change column length of existing table in SQL?如何在 SQL 中更改现有表的列长度?
【发布时间】:2023-03-06 06:14:01
【问题描述】:

我有一个 SQL 表,其中包含一定长度的 (TEXT/VARCHAR) 列。

如何在不删除或硬编码现有数据库表的情况下更改现有列长度。

2020_02_13_065846_create_users_documents_table.php

public function up()
    {
        Schema::create('user_documents', function (Blueprint $table) {

            $table->increments('id');
            $table->string('upload_url', 200)->nullable();
            $table->string('user_name', 50)->nullable();
        });

现在我想通过创建一个新表将user_name 列的长度更改为 200。

【问题讨论】:

  • 您可以在该文件中更正它并刷新迁移(删除所有内容),或者您进行新迁移并在其中添加更改语句(生产解决方案)。
  • "通过创建新表"?为什么要新表?
  • 您可以使用change() 方法更改列。
  • 我从未使用过@MohamedGamalEldin 的那个解决方案,因为它需要 doctrine/dbal 包,而你可以通过声明来实现。
  • 我知道,如果小改动可以使用语句,但对于大项目,我认为doctrine/dbal 更好。 @N69S

标签: laravel migration laravel-migrations


【解决方案1】:

你只需要modify你的专栏:

change 方法允许您修改现有列的类型和属性。例如,您可能希望增加字符串列的大小

做一个新的迁移,设置这个语句:

Schema::table('users', function ($table) {
    $table->string('upload_url', 500)->change();
 $table->string('user_name', 500)->change();
});

【讨论】:

    【解决方案2】:
    1. 开发解决方案

    您在该文件中更正它并使用 php artisan migrate:fresh 刷新您的迁移,但 您丢失了数据库中的所有数据

    1. 生产解决方案

    使用 alter 语句进行新的迁移。

    public function up()
    {
        \DB::statement('ALTER TABLE user_documents ALTER COLUMN upload_url VARCHAR (200)');
    }
    

    【讨论】:

      猜你喜欢
      • 2022-08-19
      • 2013-09-16
      • 1970-01-01
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多