text
a ntext
jsou zastaralé, takže je na chvíli vynechme. Pro to, co zbylo, existují 3 rozměry:
- Unicode (UCS-2) vs. non-unicode:
N
před názvem označuje Unicode - Pevná délka vs. proměnná délka:
var
označuje proměnnou, jinak pevnou - In-row vs. BLOB:
(max)
jak délka označuje BLOB, jinak je to hodnota v řádku
Takže s tímto můžete číst význam jakéhokoli typu:
CHAR(10)
:je řádková pevná délka bez Unicode velikosti 10NVARCHAR(256)
:je Unicode s proměnnou délkou v řádku o velikosti až 256VARCHAR(MAX)
:je objekt BLOB s proměnnou délkou bez Unicode
Zastaralé typy text
a ntext
odpovídají novým typům varchar(max)
a nvarchar(max)
respektive.
Když přejdete na podrobnosti, význam in-row
vs. BLOB
rozmaže na malé délky, jak motor může optimalizovat úložiště a vytáhnout BLOB v řádku nebo vložit hodnotu v řádku do alokační jednotky 'small BLOB', ale to je jen detail implementace. Viz Organizace tabulek a indexů
.
Z programovacího hlediska všechny typy:CHAR
, VARCHAR
, NCHAR
, NVARCHAR
, VARCHAR(MAX)
a NVARCHAR(MAX)
, podporují jednotné řetězcové API:Funkce řetězců
. Staré, zastaralé typy TEXT
a NTEXT
ne podporují toto API, mají samostatné, zoufalé, TEXT API pro manipulaci. Neměli byste používat zastaralé typy.
Typy BLOB podporují účinné aktualizace na místě pomocí UPDATE table SET column.WRITE(@value, @offset)
syntaxe.
Rozdíl mezi typy s pevnou délkou a proměnnou délkou zmizí při kompresi řádků v tabulce. S povolenou kompresí řádků jsou typy pevné délky a proměnné délky uloženy ve stejném formátu a koncové mezery se neukládají na disk, viz Implementace komprese řádků . Všimněte si, že komprese stránky znamená kompresi řádků.