Какое максимальное количество символов может содержать nvarchar (MAX)?

102

Я новичок в этой концепции nvarchar(MAX). Сколько символов в нем будет?

кваккели
источник

Ответы:

155

Максимум. емкость составляет 2 гигабайта пространства - так что вы смотрите на чуть более 1 миллиарда 2-байтовых символов, которые уместятся в NVARCHAR(MAX)поле.

Используя более подробные номера другого ответа, вы сможете сохранить

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

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

в вашем NVARCHAR(MAX)столбце (к сожалению, эта последняя половина символа потрачена впустую ...)

Обновление: как отметил @MartinMulder: любой столбец символов переменной длины также имеет 2-байтовые накладные расходы для хранения фактической длины, поэтому мне нужно было вычесть еще два байта из 2 ^ 31 - 1длины, которую я ранее оговорил - таким образом, вы можете сохранить на 1 символ Unicode меньше, чем Я утверждал раньше.

marc_s
источник
1
Вау ... так что, думаю, мне не нужно беспокоиться об установке правила проверки максимального размера. Однако мне лучше быть осторожнее, когда я использую nvarchar (MAX).
quakkels
20
@quakkels: если вы не планируете превзойти «Войну и мир» Толстого (примерно 3,1 миллиона символов) почти в 350 раз - нет, вам не придется беспокоиться о емкости :-) И поскольку это тип VARCHAR / NVARCHAR, он будет всегда используйте столько места, сколько необходимо - не беспокойтесь о потраченном впустую или излишне зарезервированном пространстве ...
marc_s
2
действительно? Это классно. Просто из любопытства, в каком случае вы не захотите использовать nvarchar (MAX)?
quakkels
5
@quakkels: используйте VARCHAR(MAX), если вам не нужна двухбайтовая поддержка азиатских, арабских или кириллических языков. Используйте, (N)VARCHAR(x)если вы знаете, что строка никогда не будет длиннее x символов (не используйте NVARCHAR(MAX)для имени - используйте NVARCHAR(50)или что-то еще, что имеет для вас смысл)
marc_s
1
Я только начал свое утро с того же вопроса, и оба ваших ответа вызвали у меня широкую улыбку. +1.
Matthis Kohli
11

Из char и varchar (Transact-SQL)

varchar [(n | max)]

Символьные данные переменной длины, отличные от Unicode. n может принимать значения от 1 до 8000. max указывает, что максимальный размер хранилища составляет 2 ^ 31-1 байта. Размер хранилища - это фактическая длина введенных данных + 2 байта. Вводимые данные могут иметь длину 0 символов. Синонимы ISO для varchar - это символьные или символьные.

Адриан Стандер
источник
4

2 ^ 31-1 байт. Итак, чуть меньше 2 ^ 31-1 символов для varchar (max) и половина - для nvarchar (max).

nchar и nvarchar

Томас
источник