2010-01-16 6 views

ответ

2

Насколько я помню, это 8000 символов.

Для NVARCHAR это 4000.

+0

Is 8000 char = 8000 байт в sql ???? – Kumar

+0

@Kumar: ** да! ** Для 'varchar' это 1 char = 1 байт, для' nvarchar' это 1 char = 2 байт –

24

Varchar в 8000 и NVARCHAR 4000.

Вот ссылка VARCHAR MSDN:
http://msdn.microsoft.com/en-us/library/aa258242(SQL.80).aspx

+0

Есть 8000 char = 8000 байт в sql ???? – Kumar

+0

@Kumar: да, для VARCHAR, 1 символ = 1 байт; для NVARCHAR, 1 символ = 2 байт –

+1

Это немного сложнее, чем это. Короткая версия заключается в том, что varchar и nvarchar не используют пространство, пока вы на самом деле не разместите данные. –

2

Максимальный размер VARCHAR (макс) велико (2GB или 2Gchars, я думаю). Максимальное значение, которое вы можете указать для n в varchar (n), равно 8000, а для nvarchar - 4000.

+5

Нет varchar (max) в SQL 2000 – MartW

+0

Вы правы, но тогда вопрос недействителен. Вторая часть моего ответа по-прежнему сохраняется – erikkallen

11

Страница данных SQL Server имеет 8k: 8192 байта. Из этого часть зарезервирована для заголовка страницы, оставляя 8060 байтов максимальной величиной, которую может иметь одна строка. Строка varbinary (n), varchar (n) и nvarchar (n) не может превышать 8000 байт, что означает, что varchar (8000) - максимальная длина Ascii, а nvarchar (4000) - максимальная длина Unicode (поскольку Unicode хранит каждый символ по 2 байта).

Лучшее объяснение всех этих деталей происходит от Inside the Storage Engine: Anatomy of a page.

+1

+1 Маленький лакомый кусочек: Unicode не сохраняет каждый символ в 2 байтах. Это зависит от кодировки. UTF-8 и UTF-16 являются кодировками переменной длины, UTF-32 является единственным фиксированным размером, который я знаю. Существуют и другие кодировки (UCS-2, UTF-7). Внутри Microsoft обычно использует UTF-16, где размер по умолчанию для символа равен 2 байтам. Это справедливо для по крайней мере всех продуктов на базе .NET и для SQL Server. – Abel

+0

@abel: SQL Server [использует кодировку UCS-2LE] (http://msdn.microsoft.com/en-us/library/ms189617 (v = sql.105) .aspx), которая составляет ровно 2 байта на символ. Я согласен с тем, что «Unicode», как указано в сообщении, не имеет строго 2 байта на символ. –

+0

Да, вы правы на UCS-2, я все время забываю об этом, это одна из моих главных проблем, так как она допускает только символы BMP. Tx для указания этого :) – Abel

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

  • Нет связанных вопросов^_^