2010-07-28 37 views

Respuesta

453

La diferencia se basa en cómo el símbolo se convierte en su respectivo tipo de columna en el lenguaje de consulta.

con MySQL: cadena se asigna a VARCHAR (255) - http://guides.rubyonrails.org/migrations.html

:string |     VARCHAR    | :limit => 1 to 255 (default = 255) 
:text | TINYTEXT, TEXT, MEDIUMTEXT, or LONGTEXT2 | :limit => 1 to 4294967296 (default = 65536) 

Referencia:

http://www.packtpub.com/article/Working-with-Rails-ActiveRecord-Migrations-Models-Scaffolding-and-Database-Completion

¿Cuándo se debe usar cada uno?

Como regla general, utilice :string para la entrada de texto corto (nombre de usuario, correo electrónico, contraseña, títulos, etc.) y el uso :text para la entrada ya esperado, tales como descripciones, contenidos, etc. comentario

+9

Creo que una mejor regla de oro es usar siempre ': text'. Consulte http://www.depesz.com/2010/03/02/charx-vs-varcharx-vs-varchar-vs-text/ –

+61

Para MySQL: no tanto, puede tener índices en varchar, no puede en texto . –

+9

La implementación de PostgreSQL prefiere texto. La única diferencia para pg string/text es la restricción en la longitud de la cadena. Sin diferencias de rendimiento. – wurde

17

Cadena se traduce como "Varchar" en su base de datos, mientras que el texto 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 comprobar http://www.pythian.com/news/7129/text-vs-varchar/

Editar: Algunos motores de base de datos pueden cargar varchar de una sola vez, pero tienda de texto (y blob) fuera de la mesa. Un SELECT name, amount FROM products podría ser mucho más lento al usar text para name que cuando usa varchar. Y dado que Rails carga de manera predeterminada los registros con SELECT * FROM..., se cargarán sus columnas de texto. Sin embargo, esto probablemente nunca sea un problema real en tu aplicación o en la mía (la optimización prematura es ...). Pero saber que el texto no siempre es "gratuito" es bueno saberlo.

138

Si está usando postgres use texto siempre que pueda, a menos que tenga una restricción de tamaño ya que no existe una penalización de rendimiento para texto versus varchar

No hay diferencia de rendimiento entre estos tres tipos, además de un mayor espacio de almacenamiento cuando se usa el tipo de relleno en blanco, y algunos ciclos de CPU adicionales para verificar la duración n almacenar en una columna de longitud limitada. Si bien el carácter (n) tiene ventajas de rendimiento en algunos otros sistemas de bases de datos, no existe tal ventaja en PostgreSQL; de hecho, el carácter (n) suele ser el más lento de los tres debido a sus costos adicionales de almacenamiento. En la mayoría de situaciones de texto o caracteres de longitud variable se deben utilizar en lugar

PostsgreSQL manual

+4

Pero, con el interés de ser una base de datos independiente, ¿es este el mejor enfoque? ¿Qué pasa si quieres cambiar la base de datos? Concedo, en el mundo real eso no sucede tan a menudo, pero aun así ... si no hay 'diferencia de rendimiento', ¿por qué no apegarse al uso esperado de la cuerda para las cosas cortas y el texto para las cosas más largas? Y dado su propio comentario de cadenas de indexación, todavía parece el mejor enfoque. –

+6

Hay una serie de razones por las cuales podría ser necesario en el mundo real, donde es mejor dejar pasar la idea de que existe una solución única para cualquier problema. –

+13

Eso puede ser así, pero el agnosticismo de la base de datos es un falso profeta. –

10

Como se explicó anteriormente, no sólo el tipo de datos db también afectará a la vista que se generará si está andamios. cadena generará un texto text_field generará un text_area

10

Cadena si el tamaño es fijo y pequeño y texto si es variable y grande. Esto es algo importante porque el texto es mucho más grande que las cadenas. Contiene muchos más kilobytes.

Así que para campos pequeños utilice siempre la cadena (varchar). Campos como. first_name, login, email, subject (de un artículo o publicación) y ejemplo de textos: contenido/cuerpo de una publicación o artículo. campos de los párrafos etc

tamaño de cadena de 1 a 255 (por defecto = 255)

tamaño de Texto 1 al 4294967296 (por defecto = 65536) 2

1

Usar cadena para el campo corto, como nombres, dirección, teléfono, compañía

uso de texto para mayor cantidad de contenido, comentarios, contenido, párrafos.

Mi regla general, si se trata de algo que es más de una línea, suelo ir para el texto, si se trata de un corto de 2-6 palabras, voy por cadena.

La regla oficial es 255 para una cadena. Entonces, si su cadena tiene más de 255 caracteres, busque texto.

Cuestiones relacionadas