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