Подтвердить что ты не робот

Rails изменяет колонку на средний текст

Мне нужно изменить столбец из типа TEXT в MEDIUMTEXT. В соответствии с этим обсуждением: Как хранить длинный текст в MySql DB с помощью Rails?, мне нужно будет указать ограничение по размеру как половину допустимого диапазона для этого конкретного ТЕКСТА введите MySQL. Однако то, что я испытываю, состоит в том, что даже наполовину, я все еще получаю тип, который на один уровень выше того, что мне нужно. У кого-нибудь есть лучший документ, где это было зарегистрировано или известно, почему это происходит? Спасибо!

4b9b3361

Ответ 1

Смотрите этот ответ: Rails 3 Миграция с длинным текстом

Причина, по которой вводимые вами предельные значения игнорируются, объясняется тем, как работает MySQL. Он имеет четыре типа текста, каждый из которых имеет свой собственный размер:

  • TINYTEXT - 256 байт
  • ТЕКСТ - 65,535 байт.
  • MEDIUMTEXT - 16 777 215 байт.
  • LONGTEXT - 4 294 967 295 байт.

Текстовый столбец должен быть одним из четырех типов. Вы не можете указать произвольную длину для этих типов в MySQL.

Итак, если вы установите ограничение на столбец типа текста: Rails автоматически выберет наименьший из тех типов, которые могут вместить это значение, молча округляя предельное значение, введенное вами в один из этих четырех пределов выше.

Пример:

t.text :example_text_field, :limit => 20

создаст поле TINYTEXT с пределом в 256 байт, тогда как

t.text :example_text_field, :limit => 16.megabytes - 1

создаст поле MEDIUMTEXT с пределом 16,777,215 байт.

Update

Для дрожания вопроса: "Мне нужно изменить столбец"

change_column :example_table, :example_text_field, :text, limit: 16.megabytes - 1