Тип текста SQL Server и тип данных varchar [закрыто]
У меня есть символьные данные переменной длины и я хочу хранить их в базе данных SQL Server (2005). Я хочу узнать некоторые рекомендации о том, как выбрать текстовый тип SQL или выбрать тип VARCHAR SQL, плюсы и минусы в performance/footprint/function.
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
байт
- varchar (max), varbinary(max), xml, текст или изображение столбец 2^31-1 2^31-1
- nvarchar(max) столбец 2^30-1 2^30-1