Z MySQL Dokumentace :
Rozdíl mezi CHAR a VARCHAR hodnoty je způsob, jakým jsou uloženy, CHAR (10) vyžaduje 10 bajtů úložiště bez ohledu na to, kolik znaků použijete, protože data jsou správně doplněna mezerami, VARCHAR (10) trvá pouze 1 bajt (v 1 bajtové znakové sadě) + předpona délky (1, když je délka 255 nebo méně, 2 jinak... Nevím, proč key_len pro EXPLAIN přidat 2 bajty)
Nerozumím, co máte na mysli s mezerami na konci, i když si umím představit, že máte na mysli přebytek mezer na konci s VARCHAR tyto jsou zkráceny s varováním, mezitím v CHAR sloupce jsou tyto mezery tiše zkráceny, má to určitý smysl příčina CHAR jsou uloženy s koncovými mezerami na konci.
Pokud jde o znakovou sadu v tomto odkazu můžete vidět, že počet znaků pro CHAR nebo VARCHAR je stejný, i když vaše úložiště bude vyžadovat 1 až 4 bajty na znak, zde
je seznam podporovaných znakových sad a zde bajtů na znak.
Co jsem četl o různých formátech řádků pro InnoDB
Redundantní vlastnosti formátu řádků :
Kompaktní charakteristika formátu řádků :