Dai un'occhiata a http://dev.mysql.com /doc/refman/5.7/en/string-type-overview.html
Fondamentalmente, tutti questi tipi tranne il CHAR
sono di lunghezza variabile.
Ad esempio, se hai VARCHAR(72)
e scrivi abcd
al suo interno, memorizzerai 5 byte. 4 byte per ogni carattere e un prefisso di 1 byte per memorizzare la lunghezza della stringa (che è 4).
Se la lunghezza della stringa supera i 255 caratteri, il prefisso VARCHAR sarà di 2 byte. Quindi un VARCHAR(300)
con una stringa di 256 caratteri memorizzata occuperà 258 byte.
TINYTEXT
ha sempre un prefisso di 1 byte, perché puoi memorizzare solo 255 caratteri, quindi abcd
richiederebbe 5 byte.
TEXT
ha un prefisso di 2 byte, quindi abcd
sarebbero 6 byte.
LONGTEXT
ha un prefisso di 4 byte, quindi abcd
sarebbero 8 byte.
Infine, c'è il quasi inutile CHAR
genere. Un CHAR(72)
occuperà sempre 72 byte, indipendentemente da ciò che memorizzi al suo interno. È davvero utile solo per campi super brevi in cui c'è sempre lo stesso numero di caratteri nel campo. Come Y
o N
sarebbe un buon CHAR(1)
candidato.