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 :