TEXTse utiliza para grandes piezas de datos de cadena. Si la longitud del campo excede un cierto umbral, el texto se almacena fuera de la fila.
VARCHARsiempre se almacena en fila y tiene un límite de 8000 caracteres. Si intenta crear un VARCHAR(x), donde x> 8000 , obtiene un error:
Servidor: Mensaje 131, Nivel 15, Estado 3, Línea 1
El tamaño () dado al tipo 'varchar' excede el máximo permitido para cualquier tipo de datos (8000)
Estas limitaciones de longitud no afectan VARCHAR(MAX)a SQL Server 2005 , que puede almacenarse fuera de fila, al igual que TEXT.
Tenga en cuenta que MAXno es un tipo de constante aquí, VARCHARy VARCHAR(MAX)son tipos muy diferentes, este último está muy cerca deTEXT .
En versiones anteriores de SQL Server no se podía acceder TEXTdirectamente, solo se podía obtener TEXTPTRy usarlo enREADTEXT y WRITETEXTfunciones.
En SQL Server 2005 puede acceder directamente a las TEXTcolumnas (aunque aún necesita una conversión explícita paraVARCHAR para asignarles un valor).
TEXT es bueno:
- Si necesita almacenar textos grandes en su base de datos
- Si no busca en el valor de la columna
- Si selecciona esta columna raramente y no se une a ella.
VARCHAR es bueno:
- Si guardas cuerdas pequeñas
- Si busca en el valor de la cadena
- Si siempre lo selecciona o lo usa en uniones.
Al seleccionar aquí me refiero a emitir cualquier consulta que devuelva el valor de la columna.
Al buscar aquí me refiero a emitir cualquier consulta cuyo resultado dependa del valor de la columna TEXTo VARCHAR. Esto incluye usarlo en cualquier JOINo WHEREcondición.
Como TEXTse almacena fuera de la fila, las consultas que no involucran a la TEXTcolumna suelen ser más rápidas.
Algunos ejemplos de lo que TEXTes bueno para:
- Comentarios del blog
- Páginas Wiki
- Fuente de código
Algunos ejemplos de lo que VARCHARes bueno para:
- Nombres de usuario
- Títulos de la página
- Nombres de archivo
Como regla general, si alguna vez necesita que el valor del texto supere los 200 caracteres Y no use la combinación en esta columna, useTEXT .
De lo contrario uso VARCHAR.
PD: Lo mismo se aplica a UNICODEhabilitado NTEXTy NVARCHARtambién, que debe usar para los ejemplos anteriores.
PPS Lo mismo se aplica a VARCHAR(MAX)y NVARCHAR(MAX)que SQL Server 2005+ usa en lugar de TEXTy NTEXT. Usted será necesario que habilite large value types out of rowpara ellos con sp_tableoptionsi usted quiere que ellos sean siempre guardados fuera de la fila.
Como se mencionó anteriormente y aquí , TEXTserá desaprobado en futuras versiones:
La text in rowopción se eliminará en una versión futura de SQL Server . Evite usar esta opción en nuevos trabajos de desarrollo y planee modificar las aplicaciones que usa actualmente text in row. Nos recomienda almacenar grandes cantidades de datos mediante el uso de los varchar(max), nvarchar(max)o varbinary(max)tipos de datos. Para controlar el comportamiento en fila y fuera de fila de estos tipos de datos, use la large value types out of rowopción