Z MySQL Dokumentacja :
Różnica między CHAR i VARCHAR wartości to sposób ich przechowywania, CHAR (10) wymaga 10 bajtów pamięci bez względu na liczbę użytych znaków, ponieważ dane są uzupełnione spacjami po prawej stronie, VARCHAR (10) zajmuje tylko 1 bajt (w 1-bajtowym zestawie znaków) + prefiks długości (1, gdy długość wynosi 255 lub mniej, 2 w przeciwnym razie... Nie wiem, dlaczego key_len dla EXPLAIN dodaj 2 bajty)
Nie rozumiem, co masz na myśli z końcowymi spacjami, chociaż mogę sobie wyobrazić, że masz na myśli nadmiar końcowych spacji, z VARCHAR są one obcinane ostrzeżeniem, tymczasem w CHAR kolumny te spacje są po cichu obcinane, ma to pewien sens, ponieważ CHAR są przechowywane z końcowymi spacjami na końcu.
Odnośnie zestawu znaków w tym linku widać, że liczba znaków dla CHAR lub VARCHAR jest taki sam, chociaż twoja pamięć będzie wymagać od 1 do 4 bajtów na znak, tutaj
to lista obsługiwanych zestawów znaków i tutaj bajtów na znak.
Co przeczytałem o różnych formatach wierszy dla InnoDB
Charakterystyka nadmiarowego formatu wierszy :
Charakterystyka formatu wiersza COMPACT :