Как заменить Blob на Varchar в Laravel Make: Миграция

71
9

Мне нужно изменить тип поля 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. Я не верю, что метод миграции 'down' может отменить поврежденные данные.

Если мои данные соответствуют целевому размеру varchar и если данные соответствуют кодировке UTF-8, я в порядке с прямым утверждением Alter:

DB :: запроса ( "ALTER TABLE DB1. products изменения колонки dimensions dimensions VARCHAR (128) По умолчанию NULL;");

спросил(а) 2019-01-08T17:37:00+03:00 1 год, 9 месяцев назад
1
Решение
71

Запустите 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');
}

ответил(а) 2019-01-09T09:30:00+03:00 1 год, 9 месяцев назад
42

Вы не должны использовать sql для этого, просто создайте миграцию и используйте метод change

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);

ответил(а) 2019-01-08T17:40:00+03:00 1 год, 9 месяцев назад
-4

Оценка SQL:

\DB :: оператор ( 'ALTER TABLE products CHANGE COLUMN dimensions dimensions VARCHAR (128) DEFAULT NULL;');

Работал нормально.

ответил(а) 2019-01-08T18:34:00+03:00 1 год, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема