У меня есть символьные данные переменной длины и вы хотите хранить в базе данных SQL Server (2005). Я хочу изучить некоторые рекомендации по выбору типа TEXT SQL или выбрать тип VARCHAR SQL, плюсы и минусы в производительности/footprint/function.
Тип текста SQL Server и тип данных varchar
Ответ 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
