Från MySQL Dokumentation :
Skillnaden mellan CHAR
och VARCHAR
värden är hur de lagras, CHAR (10)
kräver 10 byte lagring oavsett hur många tecken du använder eftersom data är högerutfyllda med mellanslag, VARCHAR (10)
tar bara 1 byte (i 1 byte teckenuppsättning) + längdprefix (1 när längden är 255 eller mindre, 2 annars... Jag vet inte varför key_len för EXPLAIN
lägg till 2 byte)
Jag förstår inte vad du menar med efterföljande blanksteg, även om jag kan föreställa mig att du syftar på överskottet av efterföljande blanksteg, med VARCHAR
dessa är trunkerade med en varning, samtidigt i CHAR
kolumner dessa mellanslag trunkeras tyst, detta har någon betydelse orsak CHAR
lagras med efterföljande ämnen i slutet.
Angående teckenuppsättning i denna länk du kan se att antalet tecken för CHAR
eller VARCHAR
är densamma, även om din lagring kräver från 1 till 4 byte per tecken, här
är listan över teckenuppsättningar som stöds och här byte per tecken.
Vad jag har läst om olika radformat för InnoDB
Redundanta radformategenskaper :
KOMPAKTA radformategenskaper :