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.