Confira http://dev.mysql.com /doc/refman/5.7/en/string-type-overview.html
Basicamente, todos esses tipos, exceto o
CHAR
são de comprimento variável. Por exemplo, se você tiver
VARCHAR(72)
e você escreve abcd
nele, você armazenará 5 bytes. 4 bytes para cada caractere e um prefixo de 1 byte para armazenar o comprimento da string (que é 4). Se o comprimento da string for superior a 255 caracteres, o prefixo VARCHAR será de 2 bytes. Portanto, um
VARCHAR(300)
com uma cadeia de 256 caracteres armazenada nele ocupará 258 bytes. TINYTEXT
tem um prefixo de 1 byte sempre, porque você só pode armazenar 255 caracteres nele, então abcd
levaria 5 bytes. TEXT
tem um prefixo de 2 bytes, então abcd
seria de 6 bytes. LONGTEXT
tem um prefixo de 4 bytes, então abcd
seria 8 bytes. Por último, há o quase inútil
CHAR
modelo. Um CHAR(72)
sempre ocupará 72 bytes, não importa o que você armazene nele. É realmente útil apenas para campos super curtos, onde sempre há exatamente o mesmo número de caracteres no campo. Curtir Y
ou N
seria um bom CHAR(1)
candidato.