sql >> Base de Datos >  >> RDS >> Mysql

¿Las columnas char/varchar/text/longtext en MySQL ocupan el tamaño completo en el sistema de archivos incluso para celdas parcialmente llenas?

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.