Sprawdź http://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.