Тип текста SQL Server и тип данных varchar [закрыто]


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

4 263

4 ответа:

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

важно

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

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

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 хорошо:

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

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

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

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

некоторые примеры того, что TEXT хорошо:

  • комментарии в блоге
  • вики-страницы
  • исходный код

некоторые примеры того, что VARCHAR хорошо:

  • Логинов
  • страница титулы
  • имена

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

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

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

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

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

The text in row опция будет удалена в будущей версии SQL Server. Избегайте использования этой опции в новых разработках и запланируйте изменение приложений, которые сейчас использовать text in row. Мы рекомендуем хранить большие данные с помощью varchar(max),nvarchar(max) или varbinary(max) типы данных. Для управления поведением этих типов данных в строке и вне строки используйте .

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

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

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

как было отмечено,вы можете использовать подстроку в текстовом типе данных, но только до тех пор, пока текстовые поля содержат менее 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