Da MySQL Documentazione :
La differenza tra CHAR
e VARCHAR
valori è il modo in cui sono memorizzati, CHAR (10)
richiede 10 byte di spazio di archiviazione indipendentemente dal numero di caratteri utilizzati perché i dati sono riempiti a destra con spazi, VARCHAR (10)
occupa solo 1 byte (in un set di caratteri da 1 byte) + prefisso di lunghezza (1 quando la lunghezza è 255 o meno, 2 altrimenti... non so perché key_len per EXPLAIN
aggiungi 2 byte)
Non capisco cosa intendi con spazi finali, anche se posso immaginare che ti riferisci all'eccesso di spazi finali, con VARCHAR
questi vengono troncati con un avviso, nel frattempo in CHAR
colonne questi spazi vengono troncati silenziosamente, questo ha un senso perché CHAR
vengono memorizzati con spazi finali alla fine.
Riguardo al set di caratteri in questo link puoi vedere che il numero di caratteri per il CHAR
o VARCHAR
è lo stesso, anche se lo spazio di archiviazione richiederà da 1 a 4 byte per carattere, qui
è l'elenco dei set di caratteri supportati e qui i byte per carattere.
Quello che ho letto su diversi formati di righe per InnoDB
Caratteristiche del formato riga ridondante :
Caratteristiche del formato riga COMPACT :