TEXTviene utilizzato per grandi quantità di dati stringa. Se la lunghezza del campo supera una certa soglia, il testo viene archiviato fuori riga.
VARCHARviene sempre archiviato in una riga e ha un limite di 8000 caratteri. Se si tenta di creare un VARCHAR(x), dove x> 8000 , viene visualizzato un errore:
Server: messaggio 131, livello 15, stato 3, riga 1
La dimensione () assegnata al tipo 'varchar' supera il massimo consentito per qualsiasi tipo di dati (8000)
Questi limiti di lunghezza non riguardano VARCHAR(MAX)in SQL Server 2005 , che possono essere tenuti fuori della fila, proprio come TEXT.
Nota che qui MAXnon è un tipo di costante, VARCHARe VARCHAR(MAX)sono tipi molto diversi, quest'ultimo essendo molto vicino TEXT.
Nelle versioni precedenti di SQL Server non era possibile accedere TEXTdirettamente a, è possibile ottenere solo un TEXTPTRe utilizzarlo READTEXTe WRITETEXTfunzioni.
In SQL Server 2005 è possibile accedere direttamente alle TEXTcolonne (sebbene sia ancora necessario un cast esplicito VARCHARper assegnare un valore per esse).
TEXT è buono:
- Se è necessario memorizzare testi di grandi dimensioni nel database
- Se non si cerca il valore della colonna
- Se selezioni questa colonna raramente e non ti iscrivi su di essa.
VARCHAR è buono:
- Se conservi piccole stringhe
- Se cerchi il valore della stringa
- Se lo selezioni sempre o lo usi nei join.
Con la selezione qui intendo procedere all'emissione di query che restituiscono il valore della colonna.
Con la ricerca qui intendo il rilascio di domande il cui risultato dipende dal valore della TEXTo VARCHARcolonna. Ciò include l'utilizzo in qualsiasi JOINo WHEREcondizione.
Poiché il file TEXTè archiviato fuori riga, le query che non riguardano la TEXTcolonna sono in genere più veloci.
Alcuni esempi di ciò che TEXTè buono per:
- Commenti sul blog
- Pagine Wiki
- Codice sorgente
Alcuni esempi di ciò che VARCHARè buono per:
- Nomi utente
- Titoli di pagina
- I nomi dei file
Come regola generale, se hai mai bisogno del tuo valore di testo per superare i 200 caratteri E non usare join su questa colonna, usa TEXT.
Altrimenti usa VARCHAR.
PS Lo stesso vale per UNICODEabilitato NTEXTe NVARCHARpure, che dovresti usare per gli esempi sopra.
PPS Lo stesso vale per VARCHAR(MAX)e NVARCHAR(MAX)che SQL Server 2005+ utilizza al posto di TEXTe NTEXT. Dovrai abilitarli large value types out of rowcon sp_tableoptionse vuoi che siano sempre archiviati fuori dalla riga.
Come accennato in precedenza e qui , TEXTsarà deprecato nelle versioni future:
L' text in rowopzione verrà rimossa in una versione futura di SQL Server . Evita di utilizzare questa opzione nel nuovo lavoro di sviluppo e pianifica di modificare le applicazioni che attualmente utilizzano text in row. Si consiglia di memorizzare grandi quantità di dati utilizzando i varchar(max), nvarchar(max)o varbinary(max)tipi di dati. Per controllare il comportamento in riga e fuori riga di questi tipi di dati, utilizzare l' large value types out of rowopzione