text
e ntext
sono deprecati, quindi omettiamoli per un momento. Per ciò che resta, ci sono 3 dimensioni:
- Unicode (UCS-2) e non Unicode:
N
davanti al nome denota Unicode - Lunghezza fissa e lunghezza variabile:
var
denota variabile, altrimenti fisso - In-row vs. BLOB:
(max)
poiché la lunghezza denota un BLOB, altrimenti è un valore in-row
Quindi con questo puoi leggere il significato di qualsiasi tipo:
CHAR(10)
:è una lunghezza fissa interna alla riga non Unicode di dimensione 10NVARCHAR(256)
:è un Unicode di lunghezza variabile all'interno della riga di dimensioni fino a 256VARCHAR(MAX)
:è un BLOB a lunghezza variabile non Unicode
I tipi deprecati text
e ntext
corrispondono ai nuovi tipi varchar(max)
e nvarchar(max)
rispettivamente.
Quando vai ai dettagli, il significato di in-row
rispetto a BLOB
sfoca per piccole lunghezze come il motore può ottimizzare lo storage ed estrarre un BLOB in-row o inserire un valore in-row nell'unità di allocazione "small BLOB", ma questo è solo un dettaglio di implementazione. Vedi Organizzazione di tabelle e indici
.
Dal punto di vista della programmazione, tutti i tipi:CHAR
, VARCHAR
, NCHAR
, NVARCHAR
, VARCHAR(MAX)
e NVARCHAR(MAX)
, supporta un'API di stringa uniforme:Funzioni di stringa
. Il vecchio tipo deprecato TEXT
e NTEXT
non supportano questa API, hanno un'API di TESTO separata e separata da manipolare. Non dovresti usare i tipi deprecati.
I tipi BLOB supportano efficienti aggiornamenti sul posto utilizzando la UPDATE table SET column.WRITE(@value, @offset)
sintassi.
La differenza tra i tipi di lunghezza fissa e di lunghezza variabile svanisce quando la compressione di riga su una tabella. Con la compressione delle righe abilitata, i tipi di lunghezza fissa e la lunghezza variabile vengono archiviati nello stesso formato e gli spazi finali non vengono archiviati su disco, vedere Implementazione della compressione delle righe . Nota che la compressione della pagina implica la compressione della riga.