sql >> Base de Datos >  >> RDS >> Sqlserver

Tipo de texto de SQL Server frente a tipo de datos varchar

TEXT se utiliza para piezas grandes de datos de cadena. Si la longitud del campo supera un cierto umbral, el texto se almacena fuera de la fila.

VARCHAR siempre se almacena en fila y tiene un límite de 8000 caracteres. Si intenta crear un VARCHAR(x) , donde x> 8000 , recibe 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 a VARCHAR(MAX) en SQL Server 2005 , que puede almacenarse fuera de fila, al igual que TEXT .

Tenga en cuenta que MAX no es una especie de constante aquí, VARCHAR y VARCHAR(MAX) son de tipos muy diferentes, siendo este último muy parecido a TEXT .

En versiones anteriores de SQL Server no pudo acceder al TEXT directamente, solo podría obtener un TEXTPTR y utilícelo en READTEXT y WRITETEXT funciones.

En SQL Server 2005 puede acceder directamente a TEXT columnas (aunque aún necesita una conversión explícita a VARCHAR para asignarles un valor).

TEXT es bueno:

  • Si necesita almacenar textos grandes en su base de datos
  • Si no busca el valor de la columna
  • Si selecciona esta columna rara vez y no se une a ella.

VARCHAR es bueno:

  • Si almacenas pequeñas cuerdas
  • Si busca en el valor de cadena
  • Si siempre lo seleccionas o lo usas 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 del TEXT o VARCHAR columna. Esto incluye usarlo en cualquier JOIN o WHERE condición.

Como el TEXT se almacena fuera de la fila, las consultas no involucran el TEXT columna suelen ser más rápidos.

Algunos ejemplos de lo que TEXT es bueno para:

  • Comentarios del blog
  • Páginas wiki
  • Fuente del código

Algunos ejemplos de lo que VARCHAR es bueno para:

  • Nombres de usuario
  • Títulos de página
  • Nombres de archivo

Como regla general, si alguna vez necesita que el valor del texto supere 200 caracteres Y no use unirse en esta columna, use TEXT .

De lo contrario, use VARCHAR .

PD Lo mismo se aplica a UNICODE habilitado NTEXT y NVARCHAR también, que debe usar para los ejemplos anteriores.

PPS Lo mismo se aplica a VARCHAR(MAX) y NVARCHAR(MAX) que SQL Server 2005+ utiliza en lugar de TEXT y NTEXT . Deberá habilitar large value types out of row para ellos con sp_tableoption si desea que se almacenen siempre fuera de fila.

Como se mencionó anteriormente y aquí , TEXT quedará obsoleto en versiones futuras:

El text in row la opción se eliminará en una versión futura de SQL Server . Evite usar esta opción en nuevos trabajos de desarrollo y planee modificar aplicaciones que actualmente usan text in row . Recomendamos que almacene grandes cantidades de datos usando 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 los large value types out of row opción.