Вопрос

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

Это было полезно?

Решение

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

Важный

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

Другие советы

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

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

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

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

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

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

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

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

TEXT хороший:

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

VARCHAR хороший:

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

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

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

Как TEXT хранится вне строки, запросы, не включающие TEXT столбец обычно работает быстрее.

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

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

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

  • Имена пользователей
  • Заголовки страниц
  • Имена файлов

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

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

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

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

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

А text in row опция будет удалена в будущей версии SQL-сервер.Избегайте использования этой опции в новых разработках и планируйте модифицировать приложения, которые в настоящее время используют 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, поскольку есть лучшая альтернатива:(п)варчар(макс).И используйте 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(макс) 2^30-1 2^30-1
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top