Fra MySQL Dokumentation :
Forskellen mellem CHAR
og VARCHAR
værdier er den måde, de er gemt på, CHAR (10)
kræver 10 bytes lagerplads, uanset hvor mange tegn du bruger, fordi dataene er højrepolstret med mellemrum, VARCHAR (10)
tager kun 1 byte (i 1 byte tegnsæt) + længdepræfiks (1 når længden er 255 eller mindre, 2 ellers... Jeg ved ikke hvorfor key_len for EXPLAIN
tilføje 2 bytes)
Jeg forstår ikke, hvad du mener med efterstillede felter, selvom jeg kan forestille mig, at du henviser til overskydende mellemrum, med VARCHAR
disse afkortes med en advarsel, i mellemtiden i CHAR
kolonner disse mellemrum afkortes lydløst, dette har en vis årsag CHAR
er gemt med efterfølgende emner i slutningen.
Angående tegnsæt i dette link du kan se, at antallet af tegn for CHAR
eller VARCHAR
er det samme, selvom dit lager kræver fra 1 til 4 bytes pr. tegn, her
er listen over understøttede tegnsæt og her bytes pr. tegn.
Hvad jeg har læst om forskellige rækkeformater til InnoDB
Redundante rækkeformatkarakteristika :
KOMPAKTE Rækkeformatkarakteristika :