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
параметр.