TEXT
jest używany do dużych fragmentów danych łańcuchowych. Jeśli długość pola przekroczy określony próg, tekst zostanie zapisany poza wierszem.
VARCHAR
jest zawsze przechowywany w wierszu i ma limit 8000 postacie. Jeśli spróbujesz utworzyć VARCHAR(x)
, gdzie x> 8000 , pojawia się błąd:
Serwer:Msg 131, poziom 15, stan 3, linia 1
Rozmiar () nadany typowi „varchar” przekracza maksimum dozwolone dla dowolnego typu danych (8000)
Te ograniczenia długości nie dotyczą VARCHAR(MAX)
w SQL Server 2005 , który może być przechowywany poza wierszem, podobnie jak TEXT
.
Zwróć uwagę, że MAX
nie jest tutaj rodzajem stałej, VARCHAR
i VARCHAR(MAX)
są bardzo różne typy, te ostatnie są bardzo zbliżone do TEXT
.
We wcześniejszych wersjach SQL Server nie można było uzyskać dostępu do TEXT
bezpośrednio, możesz uzyskać tylko TEXTPTR
i użyj go w READTEXT
i WRITETEXT
funkcje.
W SQL Server 2005 możesz uzyskać bezpośredni dostęp do TEXT
kolumny (chociaż nadal potrzebujesz jawnego rzutowania na VARCHAR
aby przypisać im wartość).
TEXT
jest dobre:
- Jeśli potrzebujesz przechowywać duże teksty w swojej bazie danych
- Jeśli nie wyszukujesz według wartości kolumny
- Jeśli rzadko wybierasz tę kolumnę i nie dołączasz do niej.
VARCHAR
jest dobre:
- Jeśli przechowujesz małe struny
- Jeśli szukasz wartości ciągu
- Jeśli zawsze go wybierzesz lub użyjesz w złączeniach.
wybierając tutaj mam na myśli wydawanie jakichkolwiek zapytań, które zwracają wartość kolumny.
wyszukując mam tu na myśli wydawanie dowolnych zapytań, których wynik zależy od wartości TEXT
lub VARCHAR
kolumna. Obejmuje to używanie go w dowolnym JOIN
lub WHERE
stan.
Jako TEXT
jest przechowywany poza wierszem, zapytania nie zawierają TEXT
kolumny są zwykle szybsze.
Kilka przykładów tego, co TEXT
jest dobre dla:
- Komentarze na blogu
- Strony Wiki
- Źródło kodu
Kilka przykładów tego, co VARCHAR
jest dobre dla:
- Nazwy użytkownika
- Tytuły stron
- Nazwy plików
Ogólna zasada:jeśli kiedykolwiek będziesz potrzebować, by wartość tekstu przekraczała 200 znaki ORAZ nie używaj złączenia w tej kolumnie, użyj TEXT
.
W przeciwnym razie użyj VARCHAR
.
PS To samo dotyczy UNICODE
włączony NTEXT
i NVARCHAR
również, których powinieneś użyć w powyższych przykładach.
PSS To samo dotyczy VARCHAR(MAX)
i NVARCHAR(MAX)
ten SQL Server 2005+ używa zamiast TEXT
i NTEXT
. Musisz włączyć large value types out of row
dla nich z sp_tableoption
jeśli chcesz, aby zawsze były przechowywane poza rzędami.
Jak wspomniano powyżej i tutaj , TEXT
zostanie wycofany w przyszłych wydaniach:
text in row
opcja zostanie usunięta w przyszłej wersji SQL Server . Unikaj używania tej opcji w nowych pracach programistycznych i zaplanuj modyfikację aplikacji, które obecnie używają text in row
. Zalecamy przechowywanie dużych danych za pomocą varchar(max)
, nvarchar(max)
lub varbinary(max)
typy danych. Aby kontrolować zachowanie w wierszu i poza wierszem tych typów danych, użyj large value types out of row
opcja.