Differenza tra CHAR e VARCHAR in SQL

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).

Quando utilizzare CHAR invece che VARCHAR?

VARCHAR occupa solo 2 byte in più rispetto a CHAR. Sono rari i casi in cui convenga effettivamente utilizzare CHAR, ecco alcuni esempi:

  • CHAR(2) per l'abbreviazione di stato. SE nella tua tabella la colonna Stato sarà sempre lunga due caratteri, puoi utilizzare CHAR(2).
  • Codici prodotto a lunghezza fissa (ad es. CHAR(8) per codici prodotto come "123-4567"). 
Proprio come lo stato; se hai un campo, come il codice prodotto, che è SEMPRE una lunghezza impostata, allora CHAR è preferibile.
  • Una stringa di una sola lettera. Ad esempio, possiamo usare CHAR(1) per una iniziale.