Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Differenza tra diversi tipi di stringhe in SQL Server?

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 10
  • NVARCHAR(256) :è un Unicode di lunghezza variabile all'interno della riga di dimensioni fino a 256
  • VARCHAR(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.