Да, максимальная длина столбца varchar (max) или nvarchar (max) не является неограниченной. Предел хранения составляет 2 ГБ (2^31 -1 байт). Он ведет себя как обычный столбец varchar/nvarchar, когда данные меньше 8kb. Затем, когда данные для отдельной строки больше 8kb, она сохраняется как значение text/ntext большого объекта. Вы можете думать об этом как обертку для двух типов данных.
Однако максимальная длина символа не является2000000000
. Это 2147483645 для столбца varchar (max) и 1073741822 для столбца nvarchar (max). Это связано с тем, что nvarchar имеет 2 байта на символ и varchar имеет 1 байт на символ и 2 байта необходимы для хранения длины данных столбца переменной.
Я не думаю, что лишние метаданные вычитаются из лимита 2 ГБ, но я буду комментировать завтра, если найду что-нибудь еще.
information_schema.columns теоретическая длина для столбцов varchar, nvarchar. Не актуально. Столбец A (max) может быть от 0 до 2000000000 байт: вы не можете основывать вычисления на этом. 10 столбцов varchar каждая из 100 может принимать 0 или 1000 байтов: все еще дикая вариация – gbn
Вы пытаетесь найти максимально возможную длину строки в столбце или длину самой длинной строки в столбце? Вы можете рассматривать varchar (max) 'как неограниченное (в разумной степени). – Ray
IIRC, 'nvarchar (MAX)' эквивалентен устаревшему типу 'ntext', правильно? Это означает, что он рассматривается по-разному в отношении хранения в строке, чем будет «nvarchar (4000)». Который, я считаю, является наибольшим значением перед 'nvarchar (MAX)'. – Yuck