Qual é o número máximo de caracteres que nvarchar (MAX) conterá?

102

Eu sou novo no conceito nvarchar(MAX). Quantos personagens ele comporta?

quakkels
fonte

Respostas:

155

Máx. a capacidade é de 2 gigabytes de espaço - então você está olhando para pouco mais de 1 bilhão de caracteres de 2 bytes que cabem em um NVARCHAR(MAX)campo.

Usando os números mais detalhados da outra resposta, você deve ser capaz de armazenar

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

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

em sua NVARCHAR(MAX)coluna (infelizmente, a última metade do caractere foi perdida ...)

Atualização: como @MartinMulder apontou: qualquer coluna de caracteres de comprimento variável também tem uma sobrecarga de 2 bytes para armazenar o comprimento real - então eu precisei subtrair mais dois bytes do 2 ^ 31 - 1comprimento que eu estipulei anteriormente - assim você pode armazenar 1 caractere Unicode menor que Eu havia reivindicado antes.

marc_s
fonte
1
Uau ... então eu acho que realmente não preciso me preocupar em definir uma regra de validação de tamanho máximo. É melhor eu ter cuidado ao usar o nvarchar (MAX).
quakkels
20
@quakkels: a menos que você planeje superar a Guerra e Paz de Tolstoi (aproximadamente 3,1 milhões de caracteres) quase 350 vezes - não, você não terá que se preocupar com a capacidade :-) E como é um tipo VARCHAR / NVARCHAR, sempre use apenas o espaço necessário - não se preocupe com espaço desperdiçado ou desnecessariamente reservado ...
marc_s
2
realmente? Isso é legal. Só por curiosidade, em que caso você não gostaria de usar nvarchar (MAX)?
quakkels
5
@quakkels: use VARCHAR(MAX), se não precisar do suporte de 2 bytes para idiomas asiáticos, árabes ou cirílicos. Use (N)VARCHAR(x)se você souber que uma string nunca terá mais do que x caracteres (não use NVARCHAR(MAX)como primeiro nome - use NVARCHAR(50)ou o que quer que faça sentido para você)
marc_s
1
Acabei de começar minha manhã me perguntando a mesma pergunta e ambas as suas respostas conjuraram um grande sorriso no meu rosto. +1.
Matthis Kohli
11

De char e varchar (Transact-SQL)

varchar [(n | max)]

Dados de caracteres não Unicode de comprimento variável. n pode ser um valor de 1 a 8.000. max indica que o tamanho máximo de armazenamento é 2 ^ 31-1 bytes. O tamanho do armazenamento é o comprimento real dos dados inseridos + 2 bytes. Os dados inseridos podem ter 0 caracteres de comprimento. Os sinônimos ISO para varchar são char variando ou caractere variando.

Adriaan Stander
fonte
4

2 ^ 31-1 bytes. Portanto, um pouco menos de 2 ^ 31-1 caracteres para varchar (max) e metade disso para nvarchar (max).

nchar e nvarchar

Thomas
fonte