TEXT
viene utilizzato per grandi quantità di dati di stringa. Se la lunghezza del campo supera una certa soglia, il testo viene memorizzato fuori riga.
VARCHAR
è sempre memorizzato in una riga e ha un limite di 8000 caratteri. Se provi a creare un VARCHAR(x)
, dove x> 8000 , viene visualizzato un errore:
Server:Msg 131, Livello 15, Stato 3, Linea 1
La dimensione () assegnata al tipo 'varchar' supera il massimo consentito per qualsiasi tipo di dati (8000)
Queste limitazioni di lunghezza non riguardano VARCHAR(MAX)
in SQL Server 2005 , che può essere archiviato fuori riga, proprio come TEXT
.
Nota che MAX
non è una specie di costante qui, VARCHAR
e VARCHAR(MAX)
sono tipi molto diversi, quest'ultimo molto vicino a TEXT
.
Nelle versioni precedenti di SQL Server non è stato possibile accedere al TEXT
direttamente, potresti ottenere solo un TEXTPTR
e usalo in READTEXT
e WRITETEXT
funzioni.
In SQL Server 2005 puoi accedere direttamente a TEXT
colonne (sebbene sia comunque necessario un cast esplicito per VARCHAR
per assegnare loro un valore).
TEXT
va bene:
- Se devi archiviare testi di grandi dimensioni nel tuo database
- Se non cerchi il valore della colonna
- Se selezioni questa colonna raramente e non ti unisci ad essa.
VARCHAR
va bene:
- Se memorizzi piccole stringhe
- Se cerchi il valore della stringa
- Se lo selezioni sempre o lo usi nei join.
selezionando qui intendo emettere qualsiasi query che restituisca il valore della colonna.
cercando qui intendo emettere qualsiasi query il cui risultato dipende dal valore del TEXT
o VARCHAR
colonna. Ciò include l'utilizzo in qualsiasi JOIN
o WHERE
condizione.
Come il TEXT
è memorizzato fuori riga, le query non coinvolgono il TEXT
in genere sono più veloci.
Alcuni esempi di cosa TEXT
va bene per:
- Commenti sul blog
- Pagine Wiki
- Fonte del codice
Alcuni esempi di cosa VARCHAR
va bene per:
- Nomi utente
- Titoli delle pagine
- Nomi di file
Come regola generale, se hai bisogno che il valore del tuo testo superi 200 caratteri E non usare join su questa colonna, usa TEXT
.
Altrimenti usa VARCHAR
.
PS Lo stesso vale per UNICODE
abilitato NTEXT
e NVARCHAR
anche, che dovresti usare per gli esempi sopra.
PPS Lo stesso vale per VARCHAR(MAX)
e NVARCHAR(MAX)
che SQL Server 2005+ usa invece di TEXT
e NTEXT
. Dovrai abilitare large value types out of row
per loro con sp_tableoption
se vuoi che siano sempre archiviati fuori riga.
Come accennato in precedenza e qui , TEXT
verrà ritirato nelle versioni future:
Il 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
. Ti consigliamo di archiviare dati di grandi dimensioni utilizzando varchar(max)
, nvarchar(max)
o varbinary(max)
tipi di dati. Per controllare il comportamento all'interno e all'esterno della riga di questi tipi di dati, utilizza i large value types out of row
opzione.