Я маю дані символів різної довжини і хочу зберігати їх у базі даних SQL Server (2005). Я хочу дізнатися кілька найкращих практик щодо вибору типу TEXT SQL або вибору типу VARCHAR SQL, плюсів і мінусів у виконанні / сліді / функції.
Я маю дані символів різної довжини і хочу зберігати їх у базі даних SQL Server (2005). Я хочу дізнатися кілька найкращих практик щодо вибору типу TEXT SQL або вибору типу VARCHAR SQL, плюсів і мінусів у виконанні / сліді / функції.
Відповіді:
Якщо ви використовуєте SQL Server 2005 або новішу версію, використовуйте varchar(MAX). Тип textданих застарілий і не повинен використовуватися для нових робіт з розробки. З документів :
Важливо
ntext,textтаimageтипи даних буде видалено у майбутній версії Microsoft SQL Server. Уникайте використання цих типів даних у нових роботах з розробки та плануйте модифікувати додатки, які зараз їх використовують. Використовуйте замість nvarchar (max) , varchar (max) та varbinary (max) .
TEXTвикористовується для великих фрагментів рядкових даних. Якщо довжина поля перевищила певний поріг, текст зберігається поза рядком.
VARCHARзавжди зберігається в рядку і має обмеження 8000 символів. Якщо ви спробуєте створити a 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добре для:
Як правило, використовуйте, якщо вам коли-небудь потрібне значення тексту, яке перевищує 200 символів І не використовуйте приєднання до цього стовпця, використовуйте TEXT.
В іншому випадку використовуйте VARCHAR.
PS Те ж саме стосується UNICODEввімкненого NTEXTта іншого NVARCHAR, що ви повинні використовувати для наведених вище прикладів.
PPS Те саме стосується VARCHAR(MAX)і того, NVARCHAR(MAX)що замість та використовує SQL Server 2005+ . Вам потрібно буде включити їх, якщо ви хочете, щоб вони завжди зберігалися поза рядком.TEXTNTEXTlarge value types out of rowsp_tableoption
Як було сказано вище та тут , TEXTу наступних випусках буде застаріло:
Цей
text in rowпараметр буде видалено в майбутній версії SQL Server . Уникайте використання цієї опції в нових роботах з розробки та плануйте змінювати додатки, які зараз використовуютьсяtext in row. Ми рекомендуємо зберігати великі обсяги даних, використовуючиvarchar(max),nvarchar(max)абоvarbinary(max)тип даних. Щоб керувати поведінкою цих типів даних для рядків та поза рядків, використовуйтеlarge value types out of rowпараметр.
На сервері SQL 2005 були введені нові типи даних: varchar(max)і nvarchar(max)
вони мають переваги старого типу тексту: вони можуть містити опцію до 2 ГБ даних, але вони також мають більшість переваг varcharі nvarchar. Серед цих переваг можна відзначити можливість використання функцій маніпулювання рядками, таких як substring ().
Також varchar (max) зберігається у просторі (диска / пам'яті) таблиці, тоді як розмір нижче 8Kb. Тільки коли ви розміщуєте більше даних у полі, вони зберігаються поза простором таблиці. Дані, що зберігаються в просторі таблиці, (як правило) отримуються швидше.
Якщо коротко, ніколи не використовуйте Text, оскільки є краща альтернатива: (n) varchar (max). І використовувати лише varchar (max), коли звичайний варчар недостатньо великий, тобто якщо ви очікуєте, що їх рядок, який ви збираєтеся зберігати, перевищить 8000 символів.
Як було зазначено, ви можете використовувати SUBSTRING на типі даних TEXT, але лише в тому випадку, якщо поля TEXT містять менше 8000 символів.
У 2008 р. Відбулися деякі істотні зміни. - Можливо, варто врахувати наступну статтю, приймаючи рішення про те, який тип даних використовувати. http://msdn.microsoft.com/en-us/library/ms143432.aspx
Байтів per