在laravel迁移中将字符串改为文本类型

pcww981p  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(338)

我已经创建了一个表堆栈链接如下

Schema::create('stack_links', function (Blueprint $table) {
            $table->increments('id');
            $table->string('site_key');
            $table->string('url');
            $table->string('path_run')->nullable();
            $table->integer('state');
            $table->integer('parent')->nullable();
            $table->text('data');
            $table->timestamps();

            $table->unique(['site_key', 'url']);

            $table->index(['site_key']);
            $table->index(['state']);
            $table->index(['parent']);
            $table->index(['url']);
        });

现在我想把url列改成文本类型。所以我试过这个

$table->text('url')->change();

然而,它返回这个错误

1170 BLOB/TEXT column 'url' used in key specification without a key length

搜索之后,我发现err因为url被索引了(mysql错误:没有密钥长度的密钥规范)。所以我删除了索引,但它仍然是相同的错误。我遵循:https://laravel.com/docs/5.5/migrations#dropping-索引

Schema::table('stack_links', function (Blueprint $table) {
            $table->dropUnique(['url']);
            $table->dropIndex(['url']);

            $table->text('url')->change();
            $table->string('md5_url');

            $table->unique('md5_url');
            $table->index('md5_url');
        });

谁能告诉我哪里错了吗。
更新:问题是dropindex的参数。当我用索引的名称替换它时。它起作用了

pprl5pva

pprl5pva1#

尝试 DB Statement -

public function up()
{
    DB::statement('ALTER TABLE stack_links DROP INDEX stack_links_url_index');
    DB::statement('ALTER TABLE stack_links MODIFY COLUMN url TEXT');
}
public function down()
{
    DB::statement('ALTER TABLE stack_links CREATE INDEX stack_links_url_index');
    DB::statement('ALTER TABLE stack_links MODIFY COLUMN url STRING');
}

相关问题