Consultez http://dev.mysql.com /doc/refman/5.7/en/string-type-overview.html
Fondamentalement, tous ces types sauf le CHAR
sont de longueur variable.
Par exemple, si vous avez VARCHAR(72)
et vous écrivez abcd
dedans, vous y stockerez 5 octets. 4 octets pour chaque caractère, et un préfixe de 1 octet pour stocker la longueur de la chaîne (qui est 4).
Si la longueur de la chaîne est supérieure à 255 caractères, le préfixe VARCHAR sera de 2 octets. Donc un VARCHAR(300)
avec une chaîne de 256 caractères stockée dedans prendra 258 octets.
TINYTEXT
a toujours un préfixe de 1 octet, car vous ne pouvez y stocker que 255 caractères, donc abcd
prendrait 5 octets.
TEXT
a un préfixe de 2 octets, donc abcd
serait de 6 octets.
LONGTEXT
a un préfixe de 4 octets, donc abcd
serait de 8 octets.
Enfin, il y a le CHAR
presque inutile taper. Un CHAR(72)
occupera toujours 72 octets, peu importe ce que vous y stockez. Ce n'est vraiment utile que pour les champs super courts où il y a toujours exactement le même nombre de caractères dans le champ. Comme Y
ou N
serait un bon CHAR(1)
candidat.