Consulte http://dev.mysql.com /doc/refman/5.7/en/string-type-overview.html
Básicamente, todos estos tipos excepto el CHAR
son de longitud variable.
Por ejemplo, si tiene VARCHAR(72)
y escribes abcd
en él, almacenará 5 bytes. 4 bytes para cada carácter y un prefijo de 1 byte para almacenar la longitud de la cadena (que es 4).
Si la longitud de la cadena supera los 255 caracteres, el prefijo VARCHAR será de 2 bytes. Entonces un VARCHAR(300)
con una cadena de 256 caracteres almacenada ocupará 258 bytes.
TINYTEXT
siempre tiene un prefijo de 1 byte, porque solo puede almacenar 255 caracteres, así que abcd
tomaría 5 bytes.
TEXT
tiene un prefijo de 2 bytes, por lo que abcd
serían 6 bytes.
LONGTEXT
tiene un prefijo de 4 bytes, por lo que abcd
serían 8 bytes.
Por último, está el casi inútil CHAR
escribe. Un CHAR(72)
siempre ocupará 72 bytes sin importar lo que almacene en él. En realidad, solo es útil para campos súper cortos donde siempre hay exactamente la misma cantidad de caracteres en el campo. Me gusta Y
o N
sería un buen CHAR(1)
candidato.