Яка максимальна кількість символів, що міститиме 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 менше, ніж Я раніше заявляв.


1
Нічого собі, так що я думаю, мені не потрібно турбуватися про встановлення правила перевірки максимального розміру тоді. Мені краще бути обережним, коли я використовую nvarchar (MAX), хоча.
землетруси

20
@quakkels: якщо ви не плануєте очолити «Війну і мир Толстого» (приблизно 3,1 мільйона символів) майже в 350 разів - ні, вам не доведеться турбуватися про потужність :-) І оскільки це тип VARCHAR / NVARCHAR, він буде завжди використовуйте стільки місця, скільки потрібно - жодних турбот про втрачені чи зайві місця…
marc_s

2
справді? Круто. Щойно з цікавості, в якому випадку ви б не хотіли використовувати nvarchar (MAX)?
квакели

5
@quakkels: використовуйте VARCHAR(MAX), якщо вам не потрібна двобайтова підтримка для азіатських, арабських чи кирилицьких мов. Використовуйте, (N)VARCHAR(x)якщо ви знаєте, що рядок ніколи не буде довше x символів (не використовуйте NVARCHAR(MAX)для прізвища - використовуйте NVARCHAR(50)або будь-який сенс для вас)
marc_s

1
Я щойно розпочав свій ранок, задаючи мені те саме питання, і обидві ваші відповіді викликали велику посмішку на моєму обличчі. +1.
Маттіс Колі

11

Від char та varchar (Transact-SQL)

варчар [(n | max)]

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.