type nchar length data sql sql-server

nchar - diferencia entre varchar(500) vs varchar(max) en el servidor sql



sql text max length (2)

Quiero saber cuáles son los pros y los contras al usar varchar (500) vs varchar (max) en términos de rendimiento, memoria y cualquier otra cosa que considerar.

  • ¿Ambos usarán la misma cantidad de espacio de almacenamiento?

¿Es la respuesta diferente en el caso del servidor SQL 2000/2005/2008?


En SQL Server 2000 y SQL Server 7, una fila no puede superar los 8000 bytes de tamaño. Esto significa que una columna VARBINARY solo puede almacenar 8000 bytes (asumiendo que es la única columna en una tabla), una columna VARCHAR puede almacenar hasta 8000 caracteres y una columna NVARCHAR puede almacenar hasta 4000 caracteres (2 bytes por carácter Unicode). Esta limitación se deriva del tamaño de página interna de 8 KB que utiliza SQL Server para guardar datos en el disco.

Para almacenar más datos en una sola columna, necesita usar los tipos de datos TEXT, NTEXT o IMAGE (BLOB) que se almacenan en una colección de páginas de datos de 8 KB que están separadas de las páginas de datos que almacenan los otros datos en el misma mesa Estas páginas de datos están dispuestas en una estructura de árbol-B. Los BLOB son difíciles de trabajar y manipular. No se pueden usar como variables en un procedimiento o una función y no se pueden usar dentro de funciones de cadena como REEMPLAZAR, CHARINDEX o SUBSTRING. En la mayoría de los casos, debe utilizar los comandos READTEXT, WRITETEXT y UPDATETEXT para manipular los BLOB.

Para resolver este problema, Microsoft introdujo los tipos de datos VARCHAR (MAX), NVARCHAR (MAX) y VARBINARY (MAX) en SQL Server 2005. Estos tipos de datos pueden contener la misma cantidad de datos que los BLOB pueden contener (2 GB) y son almacenados en el mismo tipo de páginas de datos utilizadas para otros tipos de datos. Cuando los datos en un tipo de datos MAX superan los 8 KB, se utiliza una página de exceso de flujo. SQL Server 2005 asigna automáticamente un indicador de exceso de flujo a la página y sabe cómo manipular las filas de datos de la misma manera que manipula otros tipos de datos. Puede declarar variables de tipos de datos MAX dentro de un procedimiento o función almacenada e incluso pasarlas como variables. También puedes usarlos dentro de las funciones de cadena.

Microsoft recomienda el uso de tipos de datos MAX en lugar de BLOB en SQL Server 2005. De hecho, los BLOB están en desuso en futuras versiones de SQL Server.

Crédito: http://www.teratrax.com/articles/varchar_max.html

En SQL Server 2005 y SQL Server 2008 , el tamaño máximo de almacenamiento para VARCHAR (MAX) es 2 ^ 31-1 bytes (2,147,483,647 bytes o 2GB - 1 bytes). El tamaño de almacenamiento es la longitud real de los datos introducidos + 2 bytes. Los datos ingresados ​​pueden tener 0 caracteres de longitud. Como cada carácter en un tipo de datos VARCHAR usa un byte, la longitud máxima para un tipo de datos VARCHAR (MAX) es 2,147,483,645.

Lectura completa de interés para usted: http://www.sql-server-helper.com/faq/sql-server-2005-varchar-max-p01.aspx

Referencia: http://msdn.microsoft.com/en-us/library/ms143432.aspx


Una VARCHAR(MAX) aceptará un valor de 501 caracteres o más, mientras que una VARCHAR(500) no. Entonces, si tiene una regla de negocios que restringe un valor a 500 caracteres, VARCHAR(500) será más apropiado.