text
i ntext
są przestarzałe, więc pomińmy je na chwilę. Pozostały trzy wymiary:
- Unicode (UCS-2) a inne niż Unicode:
N
przed nazwą oznacza Unicode - Stała długość a zmienna długość:
var
oznacza zmienną, w przeciwnym razie ustalona - W wierszu a BLOB:
(max)
ponieważ długość oznacza BLOB, w przeciwnym razie jest wartością w wierszu
Dzięki temu możesz odczytać znaczenie dowolnego typu:
CHAR(10)
:jest w rzędzie o stałej długości nie-Unicode o rozmiarze 10NVARCHAR(256)
:jest Unicode o zmiennej długości w wierszu o rozmiarze do 256VARCHAR(MAX)
:to BLOB o zmiennej długości niebędący Unicode
Przestarzałe typy text
i ntext
odpowiadają nowym typom varchar(max)
i nvarchar(max)
odpowiednio.
Kiedy przechodzisz do szczegółów, znaczenie in-row
w porównaniu z BLOB
rozmywa się na małych długościach, ponieważ silnik może zoptymalizuj pamięć i wyciągnij BLOB w wierszu lub wepchnij wartość w wierszu do jednostki alokacji „mała BLOB”, ale to tylko szczegół implementacji. Zobacz Organizacja tabel i indeksów
.
Z punktu widzenia programowania wszystkie typy:CHAR
, VARCHAR
, NCHAR
, NVARCHAR
, VARCHAR(MAX)
i NVARCHAR(MAX)
, obsługują jednolity interfejs API ciągów:Funkcje ciągów
. Stare, przestarzałe typy TEXT
i NTEXT
nie obsługują ten interfejs API, mają oddzielny, zdeperowany, TEKSTOWY interfejs API do manipulowania. Nie należy używać przestarzałych typów.
Typy BLOB obsługują wydajne aktualizacje w miejscu przy użyciu kolumny UPDATE table SET column.WRITE(@value, @offset)
składnia.
Różnica między typami o stałej i zmiennej długości znika podczas kompresji wiersza w tabeli. Po włączeniu kompresji wierszy typy o stałej długości i zmiennej długości są przechowywane w tym samym formacie, a końcowe spacje nie są przechowywane na dysku, patrz Implementacja kompresji wierszy . Zwróć uwagę, że kompresja strony oznacza kompresję wierszy.