我需要将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 DB1
。products
更改列dimensions
dimensions
varchar(128)DEFAULT NULL;”);
答案 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;');
工作正常。