Тип текста 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