Dai un'occhiata a https://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.