2012-02-02 5 views
3

Я пытаюсь найти длину столбцов строки, указанных в таблице.Найти длину столбца varchar (max)

Я делаю это с помощью CHARACTER_MAXIMUM_LENGTH от infomation_schema.columns.

Однако для varchar(max) он возвращает -1. Мне было интересно, должен ли я возвращать максимально допустимую длину, когда varchar(max), nvarchar(max) и т. Д. Столбцы присутствуют в таблице?

+3

information_schema.columns теоретическая длина для столбцов varchar, nvarchar. Не актуально. Столбец A (max) может быть от 0 до 2000000000 байт: вы не можете основывать вычисления на этом. 10 столбцов varchar каждая из 100 может принимать 0 или 1000 байтов: все еще дикая вариация – gbn

+1

Вы пытаетесь найти максимально возможную длину строки в столбце или длину самой длинной строки в столбце? Вы можете рассматривать varchar (max) 'как неограниченное (в разумной степени). – Ray

+0

IIRC, 'nvarchar (MAX)' эквивалентен устаревшему типу 'ntext', правильно? Это означает, что он рассматривается по-разному в отношении хранения в строке, чем будет «nvarchar (4000)». Который, я считаю, является наибольшим значением перед 'nvarchar (MAX)'. – Yuck

ответ

1

Да, максимальная длина столбца 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 ГБ, но я буду комментировать завтра, если найду что-нибудь еще.

Смежные вопросы