Kolla in http://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.