Podívejte se na http://dev.mysql.com /doc/refman/5.7/en/string-type-overview.html
V podstatě všechny tyto typy kromě CHAR
mají proměnlivou délku.
Například, pokud máte VARCHAR(72)
a napíšete abcd
do něj uložíte 5 bajtů. 4 bajty pro každý znak a 1 bajtový prefix pro uložení délky řetězce (což je 4).
Pokud je délka řetězce větší než 255 znaků, pak bude mít předpona VARCHAR 2 bajty. Tedy VARCHAR(300)
s 256 znakovým řetězcem uloženým v něm zabere 258 bajtů.
TINYTEXT
má vždy 1 byte prefix, protože do něj můžete uložit pouze 255 znaků, takže abcd
zabere 5 bajtů.
TEXT
má 2bajtovou předponu, takže abcd
by bylo 6 bajtů.
LONGTEXT
má 4bajtovou předponu, takže abcd
by bylo 8 bajtů.
Nakonec je tu téměř zbytečný CHAR
typ. A CHAR(72)
bude vždy zabírat 72 bajtů bez ohledu na to, co do něj uložíte. Je to užitečné opravdu jen pro super krátká pole, kde je v poli vždy přesně stejný počet znaků. Jako Y
nebo N
by bylo dobré CHAR(1)
kandidát.