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.