如何修改SQL现有表的列长度?含Laravel迁移场景实操问题
Laravel 迁移修改字段长度操作步骤
前置准备
Laravel 修改列属性需要依赖 doctrine/dbal 包,先执行安装命令:
composer require doctrine/dbal
操作步骤
- 生成新的迁移文件
执行Artisan命令生成对应迁移文件,无需修改原有历史迁移文件:
php artisan make:migration change_user_name_length_in_user_documents_table
执行后会在database/migrations目录下生成新的迁移文件,文件名前缀为当前操作的年月日时间戳。
- 编写迁移逻辑
打开新生成的迁移文件,填入如下逻辑:
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { // 执行迁移的逻辑:把user_name长度修改为200 public function up() { Schema::table('user_documents', function (Blueprint $table) { // 保留原有nullable属性,只修改长度 $table->string('user_name', 200)->nullable()->change(); }); } // 回滚迁移的逻辑:还原为原来的50长度 public function down() { Schema::table('user_documents', function (Blueprint $table) { $table->string('user_name', 50)->nullable()->change(); }); } };
如果是Laravel 8以下的旧版本,把
return new class部分替换为对应迁移类即可,类名和生成的迁移文件名驼峰格式保持一致。
- 执行迁移
确认逻辑无误后执行迁移命令,即可在不删除原表、不改动原有结构的前提下完成字段长度修改:
php artisan migrate
注意事项
- 修改前请确认表中已存在的
user_name字段数据长度不超过200,避免迁移执行失败 - 生产环境操作前务必提前备份数据库数据
- 如果
user_name字段存在索引或者外键关联,需要先临时删除索引/外键,修改字段长度后再重新创建
内容的提问来源于stack exchange,提问作者Code cracker
相关产品推荐
相关产品推荐

