Migration Rails 3 avec texte long

90

J'ai besoin de changer un type de colonne de texte en texte long dans mon script Rails, mais je ne trouve rien sur la façon de procéder.

Quelqu'un a-t-il rencontré ça?

Merci! Dennis

dennismonsewicz
la source
1
(pour les rails 2 au moins, vous pouvez simplement spécifier le type: longtext FWIW)
rogerdpack

Réponses:

182

Les textpoignées de type tinytext, text, mediumtextet longtextpour MySQL, si c'est ce que vous utilisez. Spécifiez simplement la limite supérieure en utilisant:limit => ...

Exemple:

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

La valeur par défaut de limitest 65535, comme prévu.

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

La documentation MySQL peut être trouvée ici .

Chuck Callebs
la source
5
Il doit être "4294967295" et non "4294967296" (c'est-à-dire 4.gigabytes - 1) ou bien Mysql2::Error: Display width out of range for column ....est déclenché.
Vikrant Chaudhary
1
J'ai modifié ma réponse pour refléter cela. Merci beaucoup Vikrant.
Chuck Callebs
4
Sur mysql 5.1.52, j'ai utilisé une limite de 16.megabytes - 1, mais j'ai toujours un texte long, pas un texte moyen. Une idée pourquoi? Merci.
David M.
1
Pareil pour moi, même si vous spécifiez t.text "bla",: limit => 16777215, le type de colonne résultant est "longtext".
Martin T.17
2
@ChuckCallebs: Pourrions-nous obtenir un lien vers le PR qui a résolu ce problème et dans quelle version de Rails il est censé être livré?
Damien Wilson