VARCHAR ha una lunghezza variabile mentre CHAR ha una lunghezza fissa.
CHAR è un tipo di dati stringa a lunghezza fissa, quindi lo spazio che rimane nel campo viene riempito da spazi vuoti. CHAR occupa 1 byte per carattere.
Quindi un campo CHAR(10) occupa 10 byte sul disco, indipendentemente dalla stringa che contiene.
VARCHAR è un tipo di dati stringa a lunghezza variabile, quindi contiene solo i caratteri che gli assegnamo. Un campo VARCHAR occupa 1 byte per carattere + 2 byte per contenere le informazioni di lunghezza. Per esempio se impostiamo come VARCHAR(10) la stringa "Ciao", occuperà in tutto 6 byte (4 byte per C,i,a e o, + 2 byte).
VARCHAR occupa solo 2 byte in più rispetto a CHAR. Sono rari i casi in cui convenga effettivamente utilizzare CHAR, ecco alcuni esempi: