TEXT
se používá pro velké kusy řetězcových dat. Pokud délka pole překročí určitou prahovou hodnotu, text se uloží mimo řádek.
VARCHAR
je vždy uložen v řádku a má limit 8000 znaky. Pokud se pokusíte vytvořit VARCHAR(x)
, kde x> 8000 , zobrazí se chyba:
Server:Zpráva 131, úroveň 15, stav 3, řádek 1
Velikost () přidělená typu ‚varchar‘ překračuje maximum povolené pro jakýkoli typ dat (8000)
Tato omezení délky se netýkají VARCHAR(MAX)
v SQL Server 2005 , který může být uložen mimo řádek, stejně jako TEXT
.
Všimněte si, že MAX
zde není druh konstanty, VARCHAR
a VARCHAR(MAX)
jsou velmi odlišné typy, přičemž druhý z nich je velmi blízký TEXT
.
V předchozích verzích SQL Server nemůžete získat přístup k TEXT
přímo, můžete získat pouze TEXTPTR
a použijte jej v READTEXT
a WRITETEXT
funkce.
V SQL Server 2005 můžete přímo přistupovat k TEXT
sloupců (i když stále potřebujete explicitní přetypování na VARCHAR
přiřadit jim hodnotu).
TEXT
je dobrý:
- Pokud potřebujete do databáze uložit velké texty
- Pokud nehledáte podle hodnoty sloupce
- Pokud tento sloupec vybíráte zřídka a nepřipojujete se k němu.
VARCHAR
je dobrý:
- Pokud skladujete malé provázky
- Pokud hledáte podle hodnoty řetězce
- Pokud jej vždy vyberete nebo jej použijete ve spojeních.
Výběrem zde mám na mysli zadávání jakýchkoli dotazů, které vracejí hodnotu sloupce.
vyhledáváním zde mám na mysli zadávání jakýchkoli dotazů, jejichž výsledek závisí na hodnotě TEXT
nebo VARCHAR
sloupec. To zahrnuje použití v jakémkoli JOIN
nebo WHERE
podmínka.
Jako TEXT
je uložen mimo řádek, dotazy nezahrnují TEXT
jsou obvykle rychlejší.
Některé příklady toho, co TEXT
je dobré pro:
- Komentáře na blogu
- Stránky Wiki
- Zdroj kódu
Některé příklady toho, co VARCHAR
je dobré pro:
- Uživatelská jména
- Názvy stránek
- Názvy souborů
Obecně platí, že pokud někdy potřebujete, aby hodnota textu přesáhla 200 znaky A v tomto sloupci nepoužívejte spojení, použijte TEXT
.
Jinak použijte VARCHAR
.
P.S. Totéž platí pro UNICODE
povolen NTEXT
a NVARCHAR
také, které byste měli použít pro výše uvedené příklady.
P.P.S. Totéž platí pro VARCHAR(MAX)
a NVARCHAR(MAX)
že SQL Server 2005+ používá místo TEXT
a NTEXT
. Budete muset povolit large value types out of row
pro ně pomocí sp_tableoption
pokud chcete, aby byly vždy uloženy mimo řádek.
Jak je uvedeno výše a zde , TEXT
bude v budoucích verzích ukončena podpora:
text in row
Tato možnost bude v budoucí verzi SQL Serveru odstraněna . Vyhněte se používání této možnosti v nových vývojových pracích a plánujte upravit aplikace, které aktuálně používajítext in row
. Doporučujeme ukládat velká data pomocívarchar(max)
,nvarchar(max)
nebovarbinary(max)
typy dat. Chcete-li řídit chování těchto datových typů v řadě a mimo řádek, použijtelarge value types out of row
možnost.