TEXT
viene utilizzato per grandi quantità di dati stringa. Se la lunghezza del campo supera una certa soglia, il testo viene archiviato fuori riga.
VARCHAR
viene 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 MAX
non è un tipo di costante, VARCHAR
e VARCHAR(MAX)
sono tipi molto diversi, quest'ultimo essendo molto vicino TEXT
.
Nelle versioni precedenti di SQL Server non era possibile accedere TEXT
direttamente a, è possibile ottenere solo un TEXTPTR
e utilizzarlo READTEXT
e WRITETEXT
funzioni.
In SQL Server 2005 è possibile accedere direttamente alle TEXT
colonne (sebbene sia ancora necessario un cast esplicito VARCHAR
per 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 TEXT
o VARCHAR
colonna. Ciò include l'utilizzo in qualsiasi JOIN
o WHERE
condizione.
Poiché il file TEXT
è archiviato fuori riga, le query che non riguardano la TEXT
colonna 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 UNICODE
abilitato NTEXT
e NVARCHAR
pure, 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 TEXT
e NTEXT
. Dovrai abilitarli large value types out of row
con sp_tableoption
se vuoi che siano sempre archiviati fuori dalla riga.
Come accennato in precedenza e qui , TEXT
sarà deprecato nelle versioni future:
L' text in row
opzione 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 row
opzione