Sprawdź https://dev.mysql.com /doc/refman/5.7/en/string-type-overview.html
Zasadniczo wszystkie te typy z wyjątkiem CHAR mają zmienną długość.
Na przykład, jeśli masz VARCHAR(72) i piszesz abcd w nim zapiszesz 5 bajtów. 4 bajty na każdy znak i 1-bajtowy prefiks do przechowywania długości ciągu (czyli 4).
Jeśli długość ciągu wynosi ponad 255 znaków, prefiks VARCHAR będzie miał 2 bajty. Więc VARCHAR(300) z zapisanym w nim 256-znakowym ciągiem zajmie 258 bajtów.
TINYTEXT ma zawsze 1-bajtowy prefiks, ponieważ można w nim przechowywać tylko 255 znaków, więc abcd zajmie 5 bajtów.
TEXT ma 2-bajtowy prefiks, więc abcd będzie 6 bajtów.
LONGTEXT ma 4-bajtowy prefiks, więc abcd będzie 8 bajtów.
Wreszcie jest prawie bezużyteczny CHAR rodzaj. CHAR(72) zawsze zajmie 72 bajty bez względu na to, co w nim przechowujesz. Jest to naprawdę przydatne tylko w przypadku bardzo krótkich pól, w których zawsze jest dokładnie taka sama liczba znaków w polu. Jak Y lub N byłby dobry CHAR(1) kandydat.