2011-07-26 24 views
15

Estoy tratando de almacenar un texto largo (en mi caso un feed rss sin procesar, pero podría ser una publicación de blog larga o similar) a una base de datos MySql.¿Cómo almacenar texto largo en MySql DB usando Rails?

tengo una migración con:

change_column :contents, :description, :longtext 

Pero esto da una schema.rb con:

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

Cuando el límite debería, de hecho, se han establecido a 4294967295.

Por qué ¿Rails impone un límite superior que es la mitad de lo que debería ser posible?

Respuesta

15

No sé si los rieles son compatibles: longtext oficialmente en versiones anteriores, pero en la versión actual según rails documentation,: longtext de hecho no está especificado como tipo de datos legales. Creo que es solo una conveniencia del adaptador mysql lo que traduce esto a: texto.

La forma correcta de hacerlo es a continuación:

change_column: contenidos,: descripción,: texto,: Límite => 4294967295

Manténgalo cuenta que el tamaño máximo efectivo es menor cuando se utilizan múltiples caracteres byte.

Edit: Pensando un segundo al respecto y tiene sentido que los rieles reduzcan a la mitad el tamaño. Volviendo a leer el mysql docs sobre este tema, hablan de tamaño efectivo. Supongo que especificar 2147483647 podría conducir a un tamaño efectivo de 4294967295 cuando se llena con caracteres UTF-8 de 2 bytes. Como UTF-8 es la codificación predeterminada en ruby ​​1.9 (al menos en mi máquina), es la única forma correcta de hacerlo. ¡¿Creo?!

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

Gracias! Lo que dijiste sobre el tamaño efectivo y los rieles de codificación por defecto utf-8 tiene mucho sentido. – Magne

Cuestiones relacionadas