Como armazenar um texto longo no banco de dados MySql usando o Rails? - mysql, ruby-on-rails, texto

Eu estou tentando armazenar um texto longo (no meu caso, um feed raw rss, mas poderia muito bem ser um longo post de blog ou similar) para um banco de dados MySql.

Eu tenho uma migração com:

change_column :contents, :description, :longtext

Mas isso dá um schema.rb com:

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

Quando o limite deveria, de fato, ter sido definido como 4294967295.

Por que o Rails impõe um limite superior que é metade do que deveria ser possível?

Respostas:

15 para resposta № 1

Não sei se suporte a rails: longtext oficialmente em versões anteriores, mas na versão atual de acordo com documentação de trilhos,: longtext na verdade não é especificado como tipo de dados legal. Eu acho que é apenas uma conveniência do adaptador mysql que traduz isso para: texto.

A maneira correta de fazer isso é:

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

Tenha em mente que o tamanho máximo efetivo é menor ao usar caracteres de múltiplos bytes.

Editar: Pensando um segundo sobre isso e faz sentido que os trilhos dividam o tamanho. Relendo o docs mysql sobre este assunto, eles falam de eficaz Tamanho.Eu acho que especificar 2147483647 poderia levar a um tamanho efetivo de 4294967295 quando preenchido com caracteres utf-8 de 2 bytes. Como utf-8 é a codificação padrão em ruby ​​1.9 (pelo menos na minha máquina), é a única maneira correta de fazê-lo.

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

Perguntas relacionadas
Cardápio