Подтвердить что ты не робот

Разница между varchar (500) и varchar (max) в sql-сервере

Я хочу знать, что за плюсы и минусы, используя varchar (500) vs varchar (max) с точки зрения производительности, памяти и всего остального, чтобы рассмотреть?

  • Будут ли использовать одинаковое количество пространства для хранения?

Является ли ответ разным в случае SQL Server 2000/2005/2008?

4b9b3361

Ответ 1

В SQL Server 2000 и SQL Server 7 размер строки не может превышать 8000 байт. Это означает, что столбец VARBINARY может хранить только 8000 байт (при условии, что он является единственным столбцом в таблице), столбец VARCHAR может хранить до 8000 символов, а столбец NVARCHAR может содержать до 4000 символов (2 байта на символ юникода). Это ограничение связано с объемом внутренней страницы 8 КБ, который использует SQL Server для сохранения данных на диск.

Чтобы хранить больше данных в одном столбце, вам необходимо использовать типы данных TEXT, NTEXT или IMAGE (BLOB), которые хранятся в коллекции страниц данных объемом 8 КБ, которые отделены от страниц данных, которые хранят другую данные в той же таблице. Эти страницы данных расположены в структуре B-дерева. С BLOB трудно работать и манипулировать. Они не могут использоваться как переменные в процедуре или функции, и они не могут использоваться внутри строковых функций, таких как REPLACE, CHARINDEX или SUBSTRING. В большинстве случаев вам нужно использовать команды READTEXT, WRITETEXT и UPDATETEXT для управления BLOB.

Чтобы решить эту проблему, Microsoft представила типы данных VARCHAR (MAX), NVARCHAR (MAX) и VARBINARY (MAX) в SQL Server 2005. Эти типы данных могут содержать то же количество BLOB-данных, которые могут храниться (2 ГБ) и они хранятся на страницах данных того же типа, которые используются для других типов данных. Когда данные в типе данных MAX превышают 8 КБ, используется страница с превышением потока. SQL Server 2005 автоматически назначает индикатор перетока на страницу и знает, как управлять строками данных так же, как он манипулирует другими типами данных. Вы можете объявлять переменные типов данных MAX внутри хранимой процедуры или функции и даже передавать их как переменные. Вы также можете использовать их внутри строковых функций.

Корпорация Майкрософт рекомендует использовать типы данных MAX вместо BLOB в SQL Server 2005. На самом деле BLOB-версии устаревают в будущих выпусках SQL Server.

Кредит: http://www.teratrax.com/articles/varchar_max.html


В SQL Server 2005 и SQL Server 2008 максимальный размер хранилища для VARCHAR (MAX) составляет 2 ^ 31-1 байта (2 147 483 647 байт или 2 ГБ - 1 байт). Размер хранилища - фактическая длина введенных данных + 2 байта. Введенные данные могут содержать 0 символов. Поскольку каждый символ в типе данных VARCHAR использует один байт, максимальная длина для типа данных VARCHAR (MAX) равна 2,147,483,645.

Полноценный читает для вас: http://www.sql-server-helper.com/faq/sql-server-2005-varchar-max-p01.aspx

Ссылка: http://msdn.microsoft.com/en-us/library/ms143432.aspx

Ответ 2

Столбец VARCHAR(MAX) примет значение 501 символов или более, тогда как столбец VARCHAR(500) не будет. Поэтому, если у вас есть бизнес-правило, которое ограничивает значение до 500 символов, VARCHAR(500) будет более подходящим.