У меня есть символьные данные переменной длины, и я хочу сохранить их в базе данных SQL Server (2005). Я хочу изучить некоторые рекомендации по выбору типа SQL TEXT или типа VARCHAR SQL, плюсы и минусы в производительности / занимаемой площади / функции.
sql-server
text
varchar
sqldatatypes
George2
источник
источник
Ответы:
Если вы используете SQL Server 2005 или более позднюю версию, используйте
varchar(MAX)
. Типtext
данных устарел и не должен использоваться для новых разработок. Из документов :источник
TEXT
используется для больших кусков строковых данных. Если длина поля превышает определенный порог, текст сохраняется вне строки.VARCHAR
всегда хранится в строке и имеет ограничение в 8000 символов. Если вы попытаетесь создатьVARCHAR(x)
, где x> 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
хорошо для:Как правило, если вам когда-нибудь понадобится, чтобы текстовое значение превышало 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
будет объявлено устаревшим в следующих выпусках:источник
В сервере SQL были введены 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
Байт в
источник