如何在 SQL 中更改现有表的列长度?

Posted

技术标签:

【中文标题】如何在 SQL 中更改现有表的列长度?【英文标题】:How to change column length of existing table in SQL? 【发布时间】:2021-11-22 10:38:30 【问题描述】:

我有一个 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 【参考方案1】:

你只需要modify你的专栏:

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

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

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

【讨论】:

【参考方案2】:
    开发解决方案

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

    生产解决方案

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

public function up()

    \DB::statement('ALTER TABLE user_documents ALTER COLUMN upload_url VARCHAR (200)');

【讨论】:

以上是关于如何在 SQL 中更改现有表的列长度?的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server Management Studio 中更改 SQL Server 数据库中的列属性

如何在 Oracle 中更改视图的列大小

SQL如何更改表中的列名称?

如何在不包含新列名和类型的情况下更改现有 Hive 表中的列注释?

如何在不更改现有数据位置的情况下添加新的 SQL Server 分区范围来容纳未来的数据?

如何在sqlserver中获取表的所有列信息