Estoy creando una nueva aplicación web con Rails y me preguntaba cuál es la diferencia entre string
y text
. ¿Y cuándo debería usarse cada uno?
La diferencia radica en cómo se convierte el símbolo en su respectivo tipo de columna en el lenguaje de consulta.
en MySQL :string se convierte en VARCHAR(255)
:string | VARCHAR | :limit => 1 to 255 (default = 255)
:text | TINYTEXT, TEXT, MEDIUMTEXT, or LONGTEXT2 | :limit => 1 to 4294967296 (default = 65536)
Referencia:
**¿Cuándo debe utilizarse cada uno de ellos?
Como regla general, utilice :string
para entradas de texto cortas (nombre de usuario, correo electrónico, contraseña, títulos, etc.) y utilice :text
para entradas más largas como descripciones, contenido de comentarios, etc.
Si está utilizando Postgres, utilice texto siempre que pueda, a menos que tenga una restricción de tamaño, ya que no hay penalización de rendimiento para texto frente a varchar.
No hay diferencia de rendimiento entre estos tres tipos, aparte de un mayor espacio de almacenamiento cuando se utiliza el tipo relleno en blanco, y unos pocos ciclos de CPU adicionales para comprobar la longitud cuando se almacena en una columna de longitud limitada. Mientras que character(n) tiene ventajas de rendimiento en algunos otros sistemas de bases de datos, no existe tal ventaja en PostgreSQL; de hecho character(n) es normalmente el más lento de los tres debido a sus costes adicionales de almacenamiento. En la mayoría de las situaciones se debería utilizar en su lugar texto o caracteres variados
String se traduce como "Varchar" en su base de datos, mientras que text se traduce como "texto". Un varchar puede contener muchos menos elementos, un texto puede tener (casi) cualquier longitud.
Para un análisis en profundidad con buenas referencias consulte http://www.pythian.com/news/7129/text-vs-varchar/
Edit: Algunos motores de bases de datos pueden cargar varchar
de una sola vez, pero almacenan texto (y blob) fuera de la tabla. Un SELECT name, amount FROM products
podría ser mucho más lento si se utiliza text
para name
que si se utiliza varchar
. Y como Rails carga por defecto los registros con SELECT * FROM...
se cargarán las columnas de texto. Aunque esto probablemente nunca será un problema real en tu aplicación o en la mía (la optimización prematura es ...). Pero sabiendo que el texto no es siempre "libre" es bueno saber.