Kolla in https://dev.mysql.com /doc/refman/5.7/en/string-type-overview.html
I princip alla dessa typer utom CHAR är variabel längd.
Till exempel, om du har VARCHAR(72) och du skriver abcd i den kommer du att lagra 5 byte. 4 byte för varje tecken och ett 1 byte prefix för att lagra längden på strängen (som är 4).
Om längden på strängen är över 255 tecken, kommer VARCHAR-prefixet att vara 2 byte. Alltså en VARCHAR(300) med en sträng på 256 tecken lagrad i den tar den upp 258 byte.
TINYTEXT har alltid ett prefix på 1 byte, eftersom du bara kan lagra 255 tecken i det, så abcd skulle ta 5 byte.
TEXT har ett prefix på 2 byte, så abcd skulle vara 6 byte.
LONGTEXT har ett prefix på 4 byte, så abcd skulle vara 8 byte.
Slutligen finns det den nästan värdelösa CHAR typ. En CHAR(72) kommer alltid att ta upp 72 byte oavsett vad du lagrar i den. Det är egentligen bara användbart för superkorta fält där det alltid finns exakt samma antal tecken i fältet. Som Y eller N skulle vara en bra CHAR(1) kandidat.