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