Текстовый тип SQL Server и тип данных varchar
У меня есть символьные данные переменной длины, и я хочу сохранить их в базе данных SQL Server (2005). Я хочу изучить некоторые рекомендации о том, как выбрать тип SQL TEXT или выбрать тип SQL VARCHAR, плюсы и минусы в производительности / занимаемой площади / функции.
4 ответа
Если вы используете SQL Server 2005 или более позднюю версию, используйте varchar(MAX)
, text
Тип данных устарел и не должен использоваться для новых разработок. Из документов:
Важный
ntext
,text
, а такжеimage
типы данных будут удалены в будущей версии Microsoft SQL Server. Избегайте использования этих типов данных в новых разработках и планируйте модифицировать приложения, которые их используют в настоящее время. Вместо этого используйте nvarchar (max), varchar (max) и varbinary(max).
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
,
PS То же самое относится и к UNICODE
включен NTEXT
а также NVARCHAR
а также, что вы должны использовать для примеров выше.
PPS То же самое относится к 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
вариант.
В SQL Server 2005 были введены новые типы данных: varchar(max)
а также nvarchar(max)
У них есть преимущества старого типа текста: они могут содержать до 2 ГБ данных, но они также имеют большинство преимуществ varchar
а также nvarchar
, Среди этих преимуществ - возможность использовать функции манипуляции со строками, такие как substring().
Кроме того, varchar(max) хранится в пространстве таблицы (диск / память), пока его размер не превышает 8 КБ. Только когда вы размещаете больше данных в поле, они сохраняются за пределами таблицы. Данные, хранящиеся в пространстве таблицы, (обычно) извлекаются быстрее.
Короче говоря, никогда не используйте Text, так как есть лучшая альтернатива: (n)varchar(max). И используйте 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 (max) столбец 2 ^ 30-1 2 ^ 30-1