Quel est le nombre maximum de caractères que nvarchar (MAX) contiendra?

102

Je suis nouveau dans le concept nvarchar(MAX). Combien de personnages contiendra-t-il?

quakkels
la source

Réponses:

155

Max. La capacité est de 2 gigaoctets d'espace - vous regardez donc un peu plus d'un milliard de caractères de 2 octets qui rentreront dans un NVARCHAR(MAX)champ.

En utilisant les nombres plus détaillés de l'autre réponse, vous devriez être en mesure de stocker

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

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

dans votre NVARCHAR(MAX)colonne (malheureusement, ce dernier demi-caractère est gaspillé ...)

Mise à jour: comme @MartinMulder l'a souligné: toute colonne de caractères de longueur variable a également une surcharge de 2 octets pour stocker la longueur réelle - j'ai donc dû soustraire deux octets de plus de la 2 ^ 31 - 1longueur que j'avais précédemment stipulée - ainsi vous pouvez stocker 1 caractère Unicode de moins que J'avais réclamé avant.

marc_s
la source
1
Wow ... donc je suppose que je n'ai pas vraiment besoin de m'inquiéter de définir une règle de validation de taille maximale alors. Je ferais mieux de faire attention quand j'utilise le nvarchar (MAX).
quakkels
20
@quakkels: à moins que vous ne prévoyiez de dépasser la guerre et la paix de Tolstoi (environ 3,1 millions de caractères) près de 350 fois - non, vous n'aurez pas à vous soucier de la capacité :-) Et comme c'est un type VARCHAR / NVARCHAR, il le sera n'utilisez toujours que l'espace nécessaire - ne vous inquiétez pas non plus de l'espace gaspillé ou réservé inutilement ...
marc_s
2
vraiment? C'est super. Par curiosité, dans quel cas ne voudriez-vous pas utiliser nvarchar (MAX)?
quakkels
5
@quakkels: utilisez VARCHAR(MAX), si vous n'avez pas besoin du support 2 octets pour les langues asiatiques, arabes ou cyrilliques. À utiliser (N)VARCHAR(x)si vous savez qu'une chaîne ne sera jamais plus longue que x caractères (ne pas utiliser NVARCHAR(MAX)pour un prénom - utilisez NVARCHAR(50)ou tout ce qui a du sens pour vous)
marc_s
1
Je viens de commencer ma matinée en me posant la même question et vos deux réponses ont évoqué un grand sourire sur mon visage. +1.
Matthis Kohli
11

À partir de char et varchar (Transact-SQL)

varchar [(n | max)]

Données de caractères non Unicode de longueur variable. n peut être une valeur comprise entre 1 et 8 000. max indique que la taille de stockage maximale est de 2 ^ 31-1 octets. La taille de stockage est la longueur réelle des données saisies + 2 octets. Les données saisies peuvent comporter 0 caractère. Les synonymes ISO de varchar varient en caractères ou en caractères.

Adriaan Stander
la source
4

2 ^ 31-1 octets. Donc, un peu moins de 2 ^ 31-1 caractères pour varchar (max) et la moitié de celui pour nvarchar (max).

nchar et nvarchar

Thomas
la source