Какое максимальное количество символов для NVARCHAR (MAX)?


213

Я объявил столбец типа NVARCHAR(MAX)в SQL Server 2008, каковы будут его максимальные максимальные символы, имеющие длину MAX?


Ответы:


415

Максимальный размер столбца типа NVARCHAR(MAX)составляет 2 ГБ.

Так как NVARCHARиспользует 2 байта на символ, это ок. 1 миллиард символов

Книга « Война и мир» Льва Толстого - это книга на 1440 страниц, содержащая около 600 000 слов, то есть 6 миллионов символов, хорошо округленная. Таким образом, вы можете вставить в каждую колонку около 166 экземпляров всей книги « Война и мир»NVARCHAR(MAX) .

Достаточно ли места для ваших нужд? :-)


18
Просто гнида. NVARCHAR использует 2 байта для большинства символов. Для символов Юникода свыше U + 00FFFF. Это будет использовать четыре байта.
Эли Альгранти

7
Это безумие Спарты.
MisterGeeky

1
Что такое PostgreSQL эквивалентно NVCHAR (MAX)?
Пратик

63

По умолчанию значения nvarchar (MAX) сохраняются точно так же, как и значения nvarchar (4000), если фактическая длина не превышает 4000 символов; в этом случае данные в строке заменяются указателем на одну или несколько отдельных страниц, где хранятся данные.

Если вы ожидаете, что данные могут превысить 4000 символов, nvarchar (MAX) определенно является рекомендуемым выбором.

Источник: https://social.msdn.microsoft.com/Forums/en-US/databasedesign/thread/d5e0c6e5-8e44-4ad5-9591-20dc0ac7a870/


12
Также НЕ рекомендуется, если ваши данные никогда не будут превышать 4000 символов, поскольку существуют проблемы с индексацией.
HLGEM

Я считаю, что это устарело. Смотрите ответ от @marc_s.
Фабио Мильейру

9

Из документации MSDN

nvarchar [(n | max )]

Строковые данные Unicode переменной длины. n определяет длину строки и может принимать значение от 1 до 4000. max указывает, что максимальный размер хранилища составляет 2 ^ 31-1 байт (2 ГБ). Размер хранилища в байтах в два раза превышает фактическую длину введенных данных + 2 байта


6

Я думаю, что на самом деле nvarchar(MAX)может хранить около 1070000000 символов.


Можете ли вы объяснить, где вы получаете это число, и что вы подразумеваете под «точно»? (то есть вы говорите, что это не жесткий предел, но с большим количеством символов могут быть проблемы? Какие проблемы? Почему?)
Ади Инбар

3
Я не уверен, но я думаю, что если nvarchar использует двойной пробел, чем varchar для хранения символа, и максимальное количество памяти, которое nvarchar (MAX) может использовать для хранения символов, составляет 2 ^ 31-1 => 2147483647, то 2147483647/2 - это 1073741824. Точно я имею в виду, что это не точное число.
Франциско Хавьер Лариос Сото
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.