TEXT
се използва за големи части от низови данни. Ако дължината на полето надвишава определен праг, текстът се съхранява извън реда.
VARCHAR
винаги се съхранява в ред и има ограничение от 8000 символи. Ако се опитате да създадете VARCHAR(x)
, където x> 8000 , получавате грешка:
Сървър:Съобщение 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
.
P.S. Същото важи и за UNICODE
активиран NTEXT
и NVARCHAR
също, което трябва да използвате за примери по-горе.
P.P.S. Същото важи и за 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
опция.