Я маю дані символів різної довжини і хочу зберігати їх у базі даних 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+ . Вам потрібно буде включити їх, якщо ви хочете, щоб вони завжди зберігалися поза рядком.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 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