C'è qualche ragione per usare varchar su colonne di testo in un database?

29

varchar è solo un residuo di prima che text sia venuto fuori, o ci sono casi d'uso in cui vorresti vuoi per usare un varchar ? (Oppure char per quella materia ..)

(Uso quotidianamente Postgres e MySQL (MyISAM), quindi sono quelli che mi interessano di più, ma le risposte per altri database sono ovviamente benvenute. ^ _-)

    
posta Izkata 09.07.2012 - 21:04
fonte

3 risposte

25

In generale

Le colonne

text non sono standard e specifiche di implementazione. In molti casi, a seconda del database possono avere una combinazione di una o più delle seguenti restrizioni: non indicizzabile , non ricercabile e non ordinabile .

In Postgres

Tutti questi tipi sono salvati internamente usando la stessa C struttura dei dati. .

In MySQL

La colonna text è una versione specializzata di BLOB e ha restrizioni sull'indicizzazione.

Solo questi due esempi possono essere estrapolati agli altri sistemi SQL RDBMS e dovrebbero essere una ragione sufficiente per capire quando scegliere un tipo rispetto all'altro.

    
risposta data 04.08.2012 - 19:43
fonte
11

text , varchar e char vengono tutti utilizzati per diversi motivi. Ci sono naturalmente differenze di implementazione (quanta dimensione occupano .. ecc.), Ma ci sono anche considerazioni sull'uso e intento . Che tipo di utilizzo ti dice anche qualcosa sul tipo di dati che verranno memorizzati al suo interno (o useremmo tutti text per tutto ). Se qualcosa ha una lunghezza fissa, usiamo char . Se ha una lunghezza variabile con un limite superiore ben definito, usa varchar . Se si tratta di un grosso pezzo di testo su cui hai un controllo limitato, text sarebbe probabilmente la soluzione migliore.

    
risposta data 09.07.2012 - 22:20
fonte
4

I database sono intensamente interessati alle prestazioni: velocità e riduzione al minimo dello spazio di archiviazione. Nella maggior parte delle altre parti del mondo dei computer, non ti preoccuperai di quanti caratteri ci sono nella tua stringa di caratteri; potrebbe essere uno, potrebbe essere l'intero contenuto di un'enciclopedia; è tutto solo una stringa. In effetti, molte lingue non ti infastidiscono nemmeno sul fatto che si tratti di una stringa o di un numero.

Ma man mano che i computer diventano più veloci e acquistano più memoria, le persone inseriscono più dati nei loro database e eseguono query più elaborate. Per un database, la CPU e la memoria sono limitanti oggi come lo erano ai tempi della memoria principale da 64Kb e dei dischi fissi da 10Mb (sui computer mainframe ).

Un numero fisso di byte è molto più facile da gestire rispetto a un numero di lunghezza variabile. 10 byte è molto più facile da gestire rispetto a 1.000.000. Quindi il tuo database ti vuole dare un indizio in modo che possa darti un gigabyte di risultati da terrabyte di dati in microsecondi. Se non stai utilizzando il tuo database così tanto, non avrai bisogno della velocità che offre e sarai annoiato dalle domande inutili. Ma se hai bisogno delle prestazioni, sarai felice di dargli qualche suggerimento.

Come indicato nelle altre risposte, usa char se usa sempre un certo numero di caratteri, varchar se la lunghezza può variare ma non diventa troppo grande (la mia congettura la maggior parte dei DB la considera come char o text a seconda delle dimensioni) e text se può essere di qualsiasi lunghezza. Se il tuo SQL tenta di utilizzare una colonna text , potrebbe essere meglio riassumerla in qualche modo e inserirla in una colonna char o piccola varchar , quindi fare where e order by su quello. Certo, è solo se le prestazioni ti interessano.

    
risposta data 10.07.2012 - 18:57
fonte

Leggi altre domande sui tag