如何在Laravel Make:Migration中将Blob更改为Varchar

时间:2019-01-08 14:38:00

标签: mysql laravel eloquent

我需要将Blob字段类型更改为Varchar(128)。字段中的数据将适合目标字段大小,即文本,并且UTF-8应该没有问题。

样本数据,所有数据均采用以下格式: {“ weight”:“ 0”,“ height”:“ 0”,“ width”:“ 0”,“ length”:“ 0”}

我正在使用Laravel Make:migrate来处理转换。

我应该如何编写SQL?

我知道如何编写Laravel Migration。我也知道如何更改字段。但是Blob不是文本字段,通常也不会将Blob转换为Varchar。过去,我已经完成了Blob的一些手动UTF-8转换,并且知道如果操作不正确,您可能会弄乱数据。因此,我的关注点是不要用Laravel Migrate弄乱我的数据。我不认为“向下迁移”方法可以撤消损坏的数据。

如果我的数据适合varchar目标大小,并且数据适合UTF-8字符集,那么我可以直接使用Alter语句吗?

DB :: query(“ ALTER TABLE DB1products更改列dimensions dimensions varchar(128)DEFAULT NULL;”);

3 个答案:

答案 0 :(得分:0)

您不应为此使用sql,只需创建迁移并使用更改方法

Schema::table('table_name', function ($table) {
    $table->string('column_name')->change();
});

https://laravel.com/docs/5.7/migrations#modifying-columns

考虑您的注释sql是

ALTER TABLE tablename MODIFY column_name VARCHAR(128);

答案 1 :(得分:0)

先运行composer install,然后在控制台中运行composer update

从数据库中删除表并删除迁移,然后使用创建新迁移

php artisan make:migration change_col_datatype --table=table_name

然后进行如下更改

Schema::table('your_table_name', function ($table) {
    $table->string('your_table_name');
});

public function down()
    {
        Schema::dropIfExists('tablename');
    }

答案 2 :(得分:-1)

SQL语句:

\ DB :: statement('ALTER TABLE products更改列dimensions dimensions VARCHAR(128)DEFAULT NULL;');

工作正常。