Тип текста SQL Server илитип данных varchar [закрыт]
-
05-09-2019 - |
Вопрос
У меня есть символьные данные переменной длины, и я хочу сохранить их в базе данных 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
Байт на
- Столбец varchar(max), varbinary(max), xml, текст или изображение 2^31-1 2^31-1
- столбец nvarchar(макс) 2^30-1 2^30-1