Тип текста SQL Server и тип данных varchar

У меня есть символьные данные переменной длины и вы хотите хранить в базе данных SQL Server (2005). Я хочу изучить некоторые рекомендации по выбору типа TEXT SQL или выбрать тип VARCHAR SQL, плюсы и минусы в производительности/footprint/function.

Ответ 1

Если вы используете SQL Server 2005 или более позднюю версию, используйте varchar(MAX). Тип данных text устарел и не должен использоваться для новых разработок. Из документы:

Внимание!

ntext, text и image типы данных будут удалены в будущей версии Microsoft SQL Server. Избегайте использования этих типов данных в новых разработках и планируйте изменять приложения, которые в настоящее время их используют. Используйте nvarchar (max), varchar (max) и varbinary (max) вместо этого.

Ответ 2

TEXT используется для больших фрагментов строковых данных. Если длина поля превышает определенный порог, текст сохраняется вне строки.

VARCHAR всегда сохраняется в строке и имеет ограничение в 8000 символов. Если вы попытаетесь создать VARCHAR(x), где x > 8000, вы получите сообщение об ошибке:

Сервер: Msg 131, уровень 15, состояние 3, строка 1

Размер(), присвоенный типу 'varchar, превышает максимально допустимый для любого типа данных (8000)

Эти ограничения длины не относятся к VARCHAR(MAX) в SQL Server 2005, которые могут храниться вне строки, точно так же, как TEXT.

Обратите внимание, что MAX здесь не является константой, VARCHAR и VARCHAR(MAX) - очень разные типы, последние очень близки к TEXT.

В предыдущих версиях SQL Server вы не могли напрямую обращаться к TEXT, вы могли получить только TEXTPTR и использовать его в функциях READTEXT и WRITETEXT.

В SQL Server 2005 вы можете напрямую обращаться к столбцам TEXT (хотя вам все равно требуется явное преобразование в VARCHAR, чтобы назначить для них значение).

TEXT хорошо:

  • Если вам нужно хранить большие тексты в своей базе данных
  • Если вы не выполняете поиск по значению столбца
  • Если вы выберите этот столбец редко и не присоединяетесь к нему.

VARCHAR хорошо:

  • Если вы храните небольшие строки
  • Если вы выполняете поиск по строковому значению
  • Если вы всегда выбираете его или используете его в соединениях.

Выбрав здесь, я имею в виду выдачу любых запросов, возвращающих значение столбца.

При поиске здесь я имею в виду выдачу любых запросов, результат которых зависит от значения столбца TEXT или VARCHAR. Это включает использование его в любых условиях JOIN или WHERE.

Поскольку TEXT хранится вне строки, запросы, не содержащие столбец TEXT, обычно быстрее.

Некоторые примеры того, что TEXT полезно для:

  • Комментарии к блогу
  • Страницы вики
  • Источник кода

Некоторые примеры того, что VARCHAR полезно для:

  • Usernames
  • Названия страниц
  • Имена файлов

Как правило, если вам когда-либо понадобится текстовое значение, превышающее 200 символов И, не используйте соединение в этом столбце, используйте TEXT.

В противном случае используйте VARCHAR.

P.S. То же самое относится и к UNICODE enabled NTEXT и NVARCHAR, которые вы должны использовать для приведенных выше примеров.

P.P.S. То же самое относится к VARCHAR(MAX) и NVARCHAR(MAX), которые использует SQL Server 2005+ вместо TEXT и NTEXT. Вам нужно включить large value types out of row для них с помощью sp_tableoption, если вы хотите, чтобы они всегда хранились вне строки.

Как упоминалось выше и здесь, TEXT будет устаревать в будущих выпусках:

Опция text in row будет удалена в будущей версии SQL Server. Избегайте использования этой опции в новых разработках и планируйте изменять приложения, которые в настоящее время используют text in row. Мы рекомендуем хранить большие данные с помощью типов данных VARCHAR(MAX), NVARCHAR(MAX) или varbinary(max). Чтобы контролировать поведение этих типов данных в строке и вне строки, используйте параметр large value types out of row.

Ответ 3

В SQL Server 2005 были введены новые типы данных: varchar(max) и nvarchar(max) Они имеют преимущества старого типа текста: они могут содержать op до 2 ГБ данных, но они также имеют большинство преимуществ varchar и nvarchar. Среди этих преимуществ есть возможность использовать функции манипуляции строками, такие как substring().

Кроме того, varchar (max) сохраняется в пространстве таблицы (диска/памяти), а размер меньше 8 КБ. Только когда вы помещаете больше данных в поле, оно сохраняется из табличного пространства. Данные, хранящиеся в табличном пространстве, обычно извлекаются быстрее.

Короче говоря, никогда не используйте Text, так как есть лучшая альтернатива: (n) varchar (max). И используйте только varchar (max), когда обычный varchar недостаточно велик, т.е. если вы ожидаете, что строка, которую вы собираетесь хранить, будет превышать 8000 символов.

Как было отмечено, вы можете использовать SUBSTRING в типе данных TEXT, но только до тех пор, пока поля TEXT содержат менее 8000 символов.

Ответ 4

В мс 2008 г. произошли некоторые существенные изменения → Возможно, стоит рассмотреть следующую статью при принятии решений о том, какой тип данных использовать. http://msdn.microsoft.com/en-us/library/ms143432.aspx

Байт за

  • varchar (max), varbinary (max), xml, текст или столбец изображения 2 ^ 31-1 2 ^ 31-1
  • nvarchar (max) столбец 2 ^ 30-1 2 ^ 30-1