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

Как хранить длинный текст в MySql DB с помощью Rails?

Я пытаюсь сохранить длинный текст (в моем случае необработанный rss-канал, но также может быть длинным сообщением в блоге или похожим) в базу данных MySql.

У меня есть переход с:

change_column :contents, :description, :longtext

Но это дает schema.rb с:

t.text     "description",       :limit => 2147483647

Если предел должен быть установлен на 4294967295.

Почему Rails устанавливает верхний предел, который является половиной того, что должно быть возможно?

4b9b3361

Ответ 1

Я не знаю, поддерживались ли рельсы: longtext официально в предыдущих версиях, но в текущей версии в соответствии с рельсовая документация: longtext is фактически не указывается как юридический тип данных. Я думаю, что это только удобство адаптера mysql, которое переводит это на: текст.

Правильный способ сделать это:

change_column: contents,: description,: text,: limit = > 4294967295

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

Изменить: Думать секунду об этом, и имеет смысл, что рельсы уменьшают размер. Перечитав mysql docs на эту тему, они говорят об эффективном размере. Я предполагаю, что определение 2147483647 может привести к эффективному размеру 4294967295 при заполнении 2-байтовыми символами UTF-8. Поскольку UTF-8 является кодировкой по умолчанию в ruby ​​1.9 (по крайней мере, на моей машине), это единственный правильный способ сделать это. Я думаю?!

ruby-1.9.2-p136 :002 > "".encoding
=> #<Encoding:UTF-8>