Migração do Rails 3 com texto longo

90

Estou precisando mudar um tipo de coluna de texto para texto longo no meu script Rails, mas não consigo encontrar nada sobre como fazer isso.

Alguém encontrou isso?

Obrigado! Dennis

Dennismonsewicz
fonte
1
(para trilhos 2 pelo menos, você pode apenas especificar o tipo: longtext FWIW)
rogerdpack

Respostas:

182

Os texttipo alças tinytext, text, mediumtext, elongtext para o MySQL, se é isso que você está usando. Basta especificar o limite superior usando:limit => ...

Exemplo:

change_column :articles, :body, :text, :limit => 4294967295

O valor padrão limité 65535, conforme esperado.

1 to 255 bytes: TINYTEXT
256 to 65535 bytes: TEXT
65536 to 16777215 bytes: MEDIUMTEXT
16777216 to 4294967295 bytes: LONGTEXT

A documentação do MySQL pode ser encontrada aqui .

Chuck Callebs
fonte
5
Deve ser "4294967295" e não "4294967296" (ou seja, 4.gigabytes - 1) ou Mysql2::Error: Display width out of range for column ....será gerado.
Vikrant Chaudhary
1
Modifiquei minha resposta para refletir isso. Muito obrigado, Vikrant.
Chuck Callebs
4
No mysql 5.1.52 usei um limite de 16.megabytes - 1, mas ainda obtive um texto longo, não um texto médio. Alguma ideia do porquê? Obrigado.
David M.
1
O mesmo para mim, embora especificando t.text "bla",: limit => 16777215, o tipo de coluna resultante é "longtext".
Martin T.
2
@ChuckCallebs: Podemos obter um link para o PR que corrigiu esse problema e em qual versão do Rails ele deve ser enviado?
Damien Wilson