如何在 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 数据库中的列属性
如何在不包含新列名和类型的情况下更改现有 Hive 表中的列注释?