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

Tipo di testo di SQL Server e tipo di dati varchar

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.