Per rispondere alla domanda, su disco MySql utilizza 1 + la dimensione utilizzata nel campo per memorizzare i dati (quindi se la colonna fosse dichiarata varchar(45) e il campo fosse "FooBar" utilizzerebbe 7 byte su disco, a meno che, ovviamente, tu non stia utilizzando un set di caratteri multibyte, dove utilizzerebbe 14 byte). Quindi, comunque dichiari le tue colonne, non farà la differenza per quanto riguarda l'archiviazione (hai dichiarato di essere preoccupato per l'ottimizzazione del disco per una tabella enorme). Tuttavia, fa la differenza nelle query, poiché i VARCHAR vengono convertiti in CHAR quando MySql crea una tabella temporanea (SORT, ORDER, ecc.) e più record puoi inserire in una singola pagina, meno memoria e più veloci saranno le scansioni della tua tabella essere.