Para la versión 8.0 de MySql.
Requisitos de almacenamiento de tipo numérico
Data Type Storage Required
TINYINT 1 byte
SMALLINT 2 bytes
MEDIUMINT 3 bytes
INT, INTEGER 4 bytes
BIGINT 8 bytes
FLOAT(p) 4 bytes if 0 <= p <= 24, 8 bytes if 25 <= p <= 53
FLOAT 4 bytes
DOUBLE, REAL 8 bytes
DECIMAL(M,D), NUMERIC(M,D) Varies; see following discussion
BIT(M) approximately (M+7)/8 bytes
Los valores para las columnas DECIMAL (y NUMÉRICA) se representan utilizando un formato binario que incluye nueve dígitos decimales (base 10) en cuatro bytes. El almacenamiento para las partes enteras y fraccionarias de cada valor se determina por separado. Cada múltiplo de nueve dígitos requiere cuatro bytes, y los dígitos "sobrantes" requieren una fracción de cuatro bytes. El almacenamiento requerido para el exceso de dígitos viene dado por la siguiente tabla.
Requisitos de almacenamiento de tipo de fecha y hora Para las columnas TIME, DATETIME y TIMESTAMP, el almacenamiento requerido para las tablas creadas antes de MySQL 5.6.4 difiere de las tablas creadas a partir de 5.6.4. Esto se debe a un cambio en 5.6.4 que permite que estos tipos tengan una parte fraccional, que requiere de 0 a 3 bytes.
Data Type Storage Required Before MySQL 5.6.4 Storage Required as of MySQL 5.6.4
YEAR 1 byte 1 byte
DATE 3 bytes 3 bytes
TIME 3 bytes 3 bytes + fractional seconds storage
DATETIME 8 bytes 5 bytes + fractional seconds storage
TIMESTAMP 4 bytes 4 bytes + fractional seconds storage
A partir de MySQL 5.6.4, el almacenamiento para AÑO y FECHA permanece sin cambios. Sin embargo, TIME, DATETIME y TIMESTAMP se representan de manera diferente. DATETIME se empaqueta de manera más eficiente, requiriendo 5 en lugar de 8 bytes para la parte no fraccional, y las tres partes tienen una parte fraccional que requiere de 0 a 3 bytes, dependiendo de la precisión de segundos fraccionados de los valores almacenados.
Fractional Seconds Precision Storage Required
0 0 bytes
1, 2 1 byte
3, 4 2 bytes
5, 6 3 bytes
Por ejemplo, TIME (0), TIME (2), TIME (4) y TIME (6) usan 3, 4, 5 y 6 bytes, respectivamente. TIME y TIME (0) son equivalentes y requieren el mismo almacenamiento.
Para obtener detalles sobre la representación interna de los valores temporales, consulte MySQL Internals: algoritmos y estructuras importantes.
Requisitos de almacenamiento de tipo de cadena En la siguiente tabla, M representa la longitud de columna declarada en caracteres para tipos de cadena no binarios y bytes para tipos de cadenas binarias. L representa la longitud real en bytes de un valor de cadena dado.
Data Type Storage Required
CHAR(M) The compact family of InnoDB row formats optimize storage for variable-length character sets. See COMPACT Row Format Characteristics. Otherwise, M × w bytes, <= M <= 255, where w is the number of bytes required for the maximum-length character in the character set.
BINARY(M) M bytes, 0 <= M <= 255
VARCHAR(M), VARBINARY(M) L + 1 bytes if column values require 0 − 255 bytes, L + 2 bytes if values may require more than 255 bytes
TINYBLOB, TINYTEXT L + 1 bytes, where L < 28
BLOB, TEXT L + 2 bytes, where L < 216
MEDIUMBLOB, MEDIUMTEXT L + 3 bytes, where L < 224
LONGBLOB, LONGTEXT L + 4 bytes, where L < 232
ENUM('value1','value2',...) 1 or 2 bytes, depending on the number of enumeration values (65,535 values maximum)
SET('value1','value2',...) 1, 2, 3, 4, or 8 bytes, depending on the number of set members (64 members maximum)