2010-01-16 82 views

Respuesta

2

Por lo que recuerdo, es 8000 Chars.

Para Nvarchar es 4000.

+0

¿8000 char = 8000 bytes en sqL ???? – Kumar

+0

@Kumar: ** ¡sí! ** Para 'varchar' es 1 char = 1 byte, para' nvarchar' es 1 char = 2 byte –

24

Varchar se nvarchar 8000 y 4000. Se

Aquí está la referencia varchar MSDN:
http://msdn.microsoft.com/en-us/library/aa258242(SQL.80).aspx

+0

¿8000 char = 8000 bytes en sqL ???? – Kumar

+0

@Kumar: sí, para VARCHAR, 1 carácter = 1 byte; para NVARCHAR, 1 carácter = 2 bytes –

+1

Es un poco más complicado que eso. La versión corta es que varchar y nvarchar no usan el espacio hasta que realmente coloques datos ahí. –

2

El tamaño máximo de varchar (max) es grande (2GB o 2Gchars, creo). El valor máximo que puede especificar para n en varchar (n) es 8000, y para nvarchar es 4000.

+5

No varchar (max) en SQL 2000 – MartW

+0

Tiene razón, pero entonces la pregunta es nula. La segunda parte de mi respuesta aún contiene – erikkallen

11

Una página de datos de SQL Server tiene 8k: 8192 bytes. A partir de esto, una parte se reserva para el encabezado de la página, dejando 8060 bytes la cantidad máxima que una fila puede tener. En una fila, los tipos varbinary (n), varchar (n) y nvarchar (n) no pueden exceder 8000 bytes, lo que significa que varchar (8000) es la longitud máxima de Ascii y nvarchar (4000) es la longitud Unicode máxima (desde Unicode almacena cada personaje en 2 bytes).

La mejor explicación de todos estos detalles proviene del Inside the Storage Engine: Anatomy of a page.

+1

+1 Pequeño tidbit: Unicode no almacena cada carácter en 2 bytes. Eso depende de la codificación. UTF-8 y UTF-16 son codificaciones de longitud variable, UTF-32 es el único de tamaño fijo que conozco. Existen otras codificaciones (UCS-2, UTF-7). Internamente, Microsoft generalmente usa UTF-16, donde el tamaño predeterminado de un personaje es de 2 bytes. Esto es cierto para al menos todos los productos basados ​​en .NET y para SQL Server. – Abel

+0

@abel: SQL Server [usa codificación UCS-2LE] (http://msdn.microsoft.com/en-us/library/ms189617 (v = sql.105) .aspx), que tiene exactamente 2 bytes por carácter. Aunque estoy de acuerdo en que 'Unicode', tal como está redactado en la publicación, no tiene estrictamente 2 bytes por carácter. –

+0

Sí, tienes razón en UCS-2, sigo olvidándome de eso, es uno de mis mayores problemas, ya que solo permite caracteres BMP. Tx por señalar eso :) – Abel

Cuestiones relacionadas