text e ntext sono deprecati, quindi omettiamoli per un momento. Per ciò che resta, ci sono 3 dimensioni:
- Unicode (UCS-2) e non Unicode:
Ndavanti al nome denota Unicode - Lunghezza fissa e lunghezza variabile:
vardenota 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.