sql >> Databáze >  >> RDS >> Sqlserver

SQL Server Textový typ vs. datový typ varchar

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) nebo varbinary(max) typy dat. Chcete-li řídit chování těchto datových typů v řadě a mimo řádek, použijte large value types out of row možnost.



  1. MySQL:Velký VARCHAR vs. TEXT?

  2. Proč má klauzule Oracle IN limit 1000 pouze pro statická data?

  3. Vraťte řádky v přesném pořadí, v jakém byly vloženy

  4. Jak spustit více instancí MySQL na stejném počítači