Из этого документа Microsoft, +
n определяет длину строки и может принимать значение от 1 до 8000. max указывает, что максимальный размер хранилища составляет 2 ^ 31-1 байт (2 ГБ). Размер хранилища - это фактическая длина введенных данных + 2 байта.
Пожалуйста, помогите мне понять это.
Максимальное количество символов для varchar, по-видимому 8000
, намного меньше, чем 2GB
ценность данных.
Я вижу, что в этом varchar(max)
столбце конкретной таблицы есть записи, которые имеют len(mycolumn)
> 100 000. Таким образом, я знаю, что могу получить 8000
в varchar(max)
столбце гораздо больше символов, чем символов .
Вопрос 1: Как 8000
персонажи вступают в игру и где я должен знать об этом?
Вопрос 2 : будет ли запрос к .net datareader к этому столбцу всегда возвращать полный результат со 100 000+ символами?
источник
varchar(max)
когда-то вызывалсяtext
и обрабатывался как другой тип данных.Ответы:
Я понимаю, почему вы неправильно это понимаете - это немного сложно. Все они действительны:
И да, если вы пытаетесь получить данные из поля VARCHAR (MAX), и кто-то хранит там 2 ГБ, пристегнитесь.
источник
and somebody stored 2GB in there, buckle up.
- Был там с несколькими файлами блобовПри установке n на 8000 в игру вступает 8000 символов. Вы должны знать о ссылках Precision, Scale и Length (Transact-SQL) о char, nchar, nvarchar и varchar. Напротив, если задать для параметра n значение max (без кавычек), SQL Server сохранит (и вернет) максимальное количество байтов (как указано в вашей цитате).
Это вопрос .Net (не SQL Server), но устройство чтения данных .Net извлекает поток байтов. Байт не является символом, и SQL Server возвращает байты (не символы). Если для n установлено значение 8000, а тип данных - nvarchar, SQL Server возвращает до 8000 байтов, что может интерпретировать устройство чтения данных .Net как 4000 символов Unicode. Если n установлено равным 8000, а тип данных - varchar, SQL Server возвращает до 8000 байт, что может интерпретировать устройство чтения данных .Net длиной до 8000 символов ANSI. Если для n задано значение max, а тип данных - nvarchar, SQL Server возвращает до 2 ^ 31-1 байт, что может интерпретировать устройство чтения данных .Net длиной до (2 ^ 31-1) / 2 символа. Если для n задано значение max, а тип данных - varchar, SQL Server возвращает до 2 ^ 31-1 байт, что может интерпретировать устройство чтения данных .Net до 2 ^ 31-1 символов ANSI.
Если вы решите использовать char или varchar (вместо nchar или nvarchar), потому что они могут хранить больше «символов» (точнее, байтов), вам нужно знать, что многие символы Unicode не имеют эквивалентных символов ANSI (таким образом, большая часть нашего пользователи всего мира не смогут увидеть свои локализованные / нативные символы в вашем приложении).
источник