Tengo datos de caracteres de longitud variable y quiero almacenarlos en la base de datos de SQL Server (2005). Quiero aprender algunas prácticas recomendadas sobre cómo elegir el tipo TEXT SQL o elegir el tipo VARCHAR SQL, los pros y los contras en rendimiento / huella / función.
sql-server
text
varchar
sqldatatypes
George2
fuente
fuente

Respuestas:
Si está utilizando SQL Server 2005 o posterior, úselo
varchar(MAX). Eltexttipo de datos está en desuso y no debe usarse para nuevos trabajos de desarrollo. De los documentos :fuente
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 unVARCHAR(x), donde x> 8000 , obtiene un error:Estas limitaciones de longitud no afectan
VARCHAR(MAX)a SQL Server 2005 , que puede almacenarse fuera de fila, al igual queTEXT.Tenga en cuenta que
MAXno es un tipo de constante aquí,VARCHARyVARCHAR(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 obtenerTEXTPTRy usarlo enREADTEXTyWRITETEXTfunciones.En SQL Server 2005 puede acceder directamente a las
TEXTcolumnas (aunque aún necesita una conversión explícita paraVARCHARpara asignarles un valor).TEXTes bueno:VARCHARes bueno: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
TEXToVARCHAR. Esto incluye usarlo en cualquierJOINoWHEREcondición.Como
TEXTse almacena fuera de la fila, las consultas que no involucran a laTEXTcolumna suelen ser más rápidas.Algunos ejemplos de lo que
TEXTes bueno para:Algunos ejemplos de lo que
VARCHARes bueno para: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, use
TEXT.De lo contrario uso
VARCHAR.PD: Lo mismo se aplica a
UNICODEhabilitadoNTEXTyNVARCHARtambién, que debe usar para los ejemplos anteriores.PPS Lo mismo se aplica a
VARCHAR(MAX)yNVARCHAR(MAX)que SQL Server 2005+ usa en lugar deTEXTyNTEXT. Usted será necesario que habilitelarge value types out of rowpara ellos consp_tableoptionsi usted quiere que ellos sean siempre guardados fuera de la fila.Como se mencionó anteriormente y aquí ,
TEXTserá desaprobado en futuras versiones:fuente
En SQL Server 2005 se introdujeron nuevos tipos de datos:
varchar(max)ynvarchar(max)tienen las ventajas del antiguo tipo de texto: pueden contener op a 2 GB de datos, pero también tienen la mayoría de las ventajas devarcharynvarchar. Entre estas ventajas están la capacidad de usar funciones de manipulación de cadenas como substring ().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 almacenan 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 Text, ya que existe una mejor alternativa: (n) varchar (max). Y solo use varchar (max) cuando un varchar normal no sea lo suficientemente grande, es decir, si espera que la cadena que va a almacenar supere los 8000 caracteres.
Como se señaló, puede usar SUBSTRING en el tipo de datos TEXT, pero solo mientras los campos TEXT contengan menos de 8000 caracteres.
fuente
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
fuente