¿Cuál es el número máximo de caracteres que contendrá nvarchar (MAX)?

102

Soy nuevo en el concepto nvarchar(MAX). ¿Cuántos personajes contendrá?

quakkels
fuente

Respuestas:

155

Max. la capacidad es de 2 gigabytes de espacio, por lo que está viendo poco más de mil millones de caracteres de 2 bytes que caben en un NVARCHAR(MAX)campo.

Usando los números más detallados de la otra respuesta, debería poder almacenar

(2 ^ 31 - 1 - 2) / 2 = 1'073'741'822 double-byte characters

1 billion, 73 million, 741 thousand and 822 characters to be precise

en su NVARCHAR(MAX)columna (desafortunadamente, ese último medio carácter se desperdicia ...)

Actualización: como señaló @MartinMulder: cualquier columna de caracteres de longitud variable también tiene una sobrecarga de 2 bytes para almacenar la longitud real, por lo que necesitaba restar dos bytes más de la 2 ^ 31 - 1longitud que había estipulado anteriormente, por lo que puede almacenar 1 carácter Unicode menos de Lo había reclamado antes.

marc_s
fuente
1
Wow ... así que supongo que realmente no necesito preocuparme por establecer una regla de validación de tamaño máximo. Sin embargo, será mejor que tenga cuidado cuando uso el nvarchar (MAX).
quakkels
20
@quakkels: a menos que planee superar la Guerra y la paz de Tolstoi (aproximadamente 3,1 millones de caracteres) casi 350 veces, no, no tendrá que preocuparse por la capacidad :-) Y dado que es del tipo VARCHAR / NVARCHAR, lo hará siempre utilice únicamente el espacio que necesita - no se preocupa por el espacio perdido o innecesariamente reservará bien ...
marc_s
2
¿De Verdad? Eso es genial. Solo por curiosidad, ¿en qué caso no querría usar nvarchar (MAX)?
quakkels
5
@quakkels: use VARCHAR(MAX), si no necesita el soporte de 2 bytes para idiomas asiáticos, árabes o cirílicos. Uso (N)VARCHAR(x)si sabes una cadena nunca será más largo que caracteres x (no utilizar NVARCHAR(MAX)un nombre - el uso NVARCHAR(50)o lo que tenga sentido para usted)
marc_s
1
Acabo de comenzar mi mañana haciéndome la misma pregunta y ambas respuestas evocaron una gran sonrisa en mi rostro. +1.
Matthis Kohli
11

De char y varchar (Transact-SQL)

varchar [(n | max)]

Datos de caracteres no Unicode de longitud variable. n puede ser un valor de 1 a 8.000. max indica que el tamaño máximo de almacenamiento es 2 ^ 31-1 bytes. El tamaño de almacenamiento es la longitud real de los datos ingresados ​​+ 2 bytes. Los datos ingresados ​​pueden tener 0 caracteres de longitud. Los sinónimos ISO para varchar varían según el carácter o el carácter.

Adriaan Stander
fuente
4

2 ^ 31-1 bytes. Entonces, un poco menos de 2 ^ 31-1 caracteres para varchar (max) y la mitad para nvarchar (max).

nchar y nvarchar

Thomas
fuente