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

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

4 ответа

Решение

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

Важный

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

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,

PS То же самое относится и к UNICODE включен NTEXT а также NVARCHAR а также, что вы должны использовать для примеров выше.

PPS То же самое относится к 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 вариант.

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

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

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

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

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

Байт на

  1. varchar(max), varbinary(max), xml, текстовый или графический столбец 2 ^ 31-1 2 ^ 31-1
  2. nvarchar (max) столбец 2 ^ 30-1 2 ^ 30-1
Другие вопросы по тегам