【问题标题】:How to Alter Blob to Varchar in Laravel Make:Migration如何在 Laravel Make:Migration 中将 Blob 更改为 Varchar
【发布时间】:2019-01-09 19:41:39
【问题描述】:

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

示例数据,所有数据均采用以下格式: {"weight":"0","height":"0","width":"0","length":"0"}

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

我应该如何编写 SQL?

我知道如何编写 Laravel 迁移。我也知道如何改变一个领域。但是 Blob 不是文本字段,Blob 通常也不会转换为 Varchar。我过去曾对 Blob 进行过一些手动 UTF-8 转换,并且知道如果操作不当,可能会弄乱数据。所以我在这里关心的是不要用 Laravel Migrate 弄乱我的数据。我不相信 migrate 'down' 方法可以撤消损坏的数据。

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

DB::query("ALTER TABLE DB1.products CHANGE COLUMN dimensions dimensions varchar(128) DEFAULT NULL;");

【问题讨论】:

  • 我关心的不是如何通过 Laravel 迁移进行更改。我知道该怎样。我也知道如何改变一个领域。只是 Blob 通常不会更改为 Varchars。在将 Blob 转换为 Varchar 时,我在 Google 中没有找到任何回报。我不想通过迁移来破坏我的数据,因为我错过了一些我应该考虑的事情。
  • @Scotty 更新了我的答案

标签: mysql laravel eloquent


【解决方案1】:

你不应该为此使用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);

【讨论】:

  • change() 方法需要学说/dbal 依赖。我没有安装那个。 'ALTER' 语句不起作用。
【解决方案2】:

在控制台中运行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');
    }

【讨论】:

    【解决方案3】:

    SQL 语句:

    \DB::statement('ALTER TABLE products CHANGE COLUMN dimensions dimensions VARCHAR(128) DEFAULT NULL;');

    工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-12
      • 2022-11-25
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 2016-10-09
      • 2020-05-22
      • 1970-01-01
      相关资源
      最近更新 更多