Laravel: данные строки, усеченные справа: 1406 Данные слишком длинны для столбца

У меня есть стол с колонкой "отель". Проект создан в Laravel 5.4, поэтому я использовал Migrations.

    $table->string('hotel', 50);

Это MYSQL VARCHAR (50). Он работал хорошо, потому что, когда я развивался, я использовал короткие названия отелей, такие как "HILTON NEW YORK 5" *.

Теперь проект идет по производству, и клиент спросил, почему они не могут вводить длинные названия отелей. Я протестировал его таким макетным названием отеля, как "Длинные долгое длинное длинное длинное длинное длинное длинное длинное и очень-очень длинное название отеля 5 звезд"

Это дало мне ошибку:

"SQLSTATE [22001]: данные строки, усеченные справа: 1406 Данные слишком длинны для столбца" отель "в строке 1"

Я открыл базу данных в своем Sequel Pro и изменил ее

  • сначала VARCHAR (255)
  • затем в ТЕКСТ

После каждого изменения я тестировал его с тем же "длинным длинным длинным длинным длинным длинным длинным длинным длинным длинным и очень-очень длинным названием отеля 5 начинается" и получает ту же ошибку (см. Выше).

Я проверил тип столбца с

SHOW FIELDS FROM table_name

и это дало мне

Поле | Тип

отель | текст

поэтому тип поля действительно "текст" (65 535 символов).

Может быть, это как-то связано с файлом миграции Laravel (см. Выше), где я установил VARCHAR (50) в начале? Но я не могу повторно запустить миграцию на производстве, потому что в таблице теперь есть данные.

Поблагодарили бы за любую помощь.


ОБНОВЛЕНИЕ: я обнаружил, что он фактически сохраняет это длинное название отеля в БД. Но пользователь по-прежнему получает эту досадную ошибку каждый раз после отправки формы...

Ответ 1

Вам нужно создать новую миграцию, зарегистрировать ее с помощью команды composer du и запустить команду php artisan migrate для изменения типа столбца:

Schema::table('the_table_name', function (Blueprint $table) {
    $table->string('hotel', 255)->change();
});

Ответ 2

В своей локальной разработке попробуйте изменить тип столбца на:

$table->longText('columnName')

из файла миграции. Это решило это для меня. Но если вы пошли вживую, создайте новую миграцию, как предложил Алексей, а затем используйте longText() столбца longText().

Ответ 3

измените тип столбца из string в text.

Затем запустите обновление миграции с помощью php artisan migrate:refesh

Ответ 4

Измените тип данных столбца со строки на текст и не указывайте длину.