length - Tipo de texto de SQL Server vs. tipo de datos varchar
varchar max length sql server (4)
Tengo datos de caracteres de longitud variable y quiero almacenar en la base de datos de SQL Server (2005). Quiero aprender algunas de las mejores prácticas sobre cómo elegir el tipo de TEXT SQL o elegir el tipo de VARCHAR SQL, ventajas y desventajas en el rendimiento / huella / función
En el servidor SQL Server 2005 se introdujeron nuevos tipos de datos: varchar(max)
y nvarchar(max)
Tienen las ventajas del tipo de texto anterior: pueden contener op a 2GB de datos, pero también tienen la mayoría de las ventajas de varchar
y nvarchar
. Entre estas ventajas se encuentra la capacidad de usar funciones de manipulación de cadenas como subcadena ().
Además, varchar (max) se almacena en el espacio de la tabla (disco / memoria) mientras que el tamaño es inferior a 8Kb. Solo cuando coloca más datos en el campo, se almacena fuera del espacio de la tabla. Los datos almacenados en el espacio de la tabla (generalmente) se recuperan más rápido.
En resumen, nunca use Texto, ya que hay una mejor alternativa: (n) varchar (max). Y solo use varchar (max) cuando una varchar regular no sea lo suficientemente grande, es decir, si espera que la cadena que va a almacenar supere los 8000 caracteres.
Como se indicó, puede usar SUBSTRING en el tipo de datos TEXT, pero solo mientras los campos TEXT contengan menos de 8000 caracteres.
Ha habido algunos cambios importantes en ms 2008 -> Podría valer la pena considerar el siguiente artículo al tomar una decisión sobre qué tipo de datos usar. http://msdn.microsoft.com/en-us/library/ms143432.aspx
Bytes por
- varchar (max), varbinary (max), xml, texto o columna de imagen 2 ^ 31-1 2 ^ 31-1
- nvarchar (max) columna 2 ^ 30-1 2 ^ 30-1
TEXT
se utiliza para grandes piezas de datos de cadena. Si la longitud del campo excede un cierto umbral, el texto se almacena fuera de fila.
VARCHAR
siempre se almacena en una fila y tiene un límite de 8000 caracteres. Si intentas crear un VARCHAR(x)
, donde x> 8000 , obtienes un error:
Servidor: Msg 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 se refieren a VARCHAR(MAX)
en SQL Server 2005 , que puede almacenarse fuera de fila, al igual que TEXT
.
Tenga en cuenta que MAX
no es un tipo de constante aquí, VARCHAR
y VARCHAR(MAX)
son tipos muy diferentes, siendo estos últimos muy cercanos al TEXT
.
En versiones anteriores de SQL Server, no podía acceder al TEXT
directamente, solo podía obtener un TEXTPTR
y utilizarlo en las funciones READTEXT
Y READTEXT
.
En SQL Server 2005 , puede acceder directamente a las columnas TEXT
(aunque todavía necesita una VARCHAR
explícita a VARCHAR
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 almacenas pequeñas cadenas
- Si buscas 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 de la columna TEXT
o VARCHAR
. Esto incluye su uso en cualquier condición de JOIN
o WHERE
.
Como el TEXT
se almacena fuera de fila, las consultas que no involucran la columna TEXT
son generalmente más rápidas.
Algunos ejemplos de lo que es bueno para TEXT
:
- Comentarios del blog
- Páginas de wiki
- Fuente de código
Algunos ejemplos de lo que VARCHAR
es bueno para:
- Nombres de usuario
- Títulos de página
- Nombres de archivos
Como regla general, si alguna vez necesita que el valor de texto exceda los 200 caracteres Y no use la combinación en esta columna, use TEXT
.
De lo contrario use VARCHAR
.
PS 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 utiliza SQL Server 2005+ en lugar de TEXT
y NTEXT
. Deberá habilitar large value types out of row
para ellos con sp_tableoption
si desea que siempre se almacenen fuera de fila.
Como se mencionó anteriormente y here , TEXT
será desaprobado en futuras versiones:
La opción de
text in row
se eliminará en una versión futura de SQL Server . Evite usar esta opción en un nuevo trabajo de desarrollo y planee modificar las aplicaciones que actualmente usantext in row
. Le recomendamos que almacene datos grandes utilizando los tipos de datosvarchar(max)
,nvarchar(max)
ovarbinary(max)
. Para controlar el comportamiento en fila y fuera de fila de estos tipos de datos, use loslarge value types out of row
opciónlarge value types out of row
.
Si está utilizando SQL Server 2005 o posterior, use varchar(MAX)
. El tipo de datos de text
está en desuso y no debe utilizarse para nuevos trabajos de desarrollo. De la documentación :
Importante
ntext
tipos de datosntext
,text
eimage
se eliminarán en una versión futura de Microsoft SQL Server. Evite utilizar estos tipos de datos en nuevos trabajos de desarrollo y planee modificar las aplicaciones que los utilizan actualmente. Use nvarchar(max) , varchar(max) y varbinary(max) lugar.