In MyISAM, c'è qualche vantaggio nel creare record a larghezza fissa. VARCHAR è larghezza variabile. CHAR è a larghezza fissa. Se le tue righe hanno solo tipi di dati a larghezza fissa, l'intera riga è a larghezza fissa e MySQL ottiene qualche vantaggio calcolando i requisiti di spazio e l'offset delle righe in quella tabella. Detto questo, il vantaggio potrebbe essere piccolo e difficilmente vale un possibile piccolo guadagno che è superato da altri costi (come l'efficienza della cache) dall'avere colonne CHAR imbottite a larghezza fissa in cui VARCHAR memorizzerebbe in modo più compatto.
Il punto di interruzione in cui diventa più efficiente dipende dalla tua applicazione e questo non è qualcosa a cui si può rispondere se non testando entrambe le soluzioni e utilizzando quella che funziona meglio per i tuoi dati nell'ambito dell'utilizzo della tua applicazione.
Per quanto riguarda INT(7) rispetto a INT(11), questo è irrilevante per l'archiviazione o le prestazioni. È un comune malinteso che l'argomento di MySQL sul tipo INT abbia qualcosa a che fare con la dimensione dei dati, ma non è così. Il tipo di dati INT di MySQL è sempre a 32 bit. L'argomento tra parentesi si riferisce a quante cifre inserire se si visualizza il valore con ZEROFILL. Per esempio. INT(7) visualizzerà 0001234 dove INT(11) visualizzerà 00000001234. Ma questo riempimento avviene solo quando il valore viene visualizzato, non durante la memorizzazione o il calcolo matematico.