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