Pour la version 8.0 de MySql.
Exigences de stockage de type numérique
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
Les valeurs des colonnes DECIMAL (et NUMERIC) sont représentées à l'aide d'un format binaire qui contient neuf chiffres décimaux (base 10) dans quatre octets. Le stockage des parties entières et fractionnaires de chaque valeur est déterminé séparément. Chaque multiple de neuf chiffres nécessite quatre octets, et les chiffres «restants» nécessitent une fraction de quatre octets. Le stockage requis pour les chiffres en excès est donné par le tableau suivant.
Exigences de stockage de type de date et d'heure Pour les colonnes TIME, DATETIME et TIMESTAMP, le stockage requis pour les tables créées avant MySQL 5.6.4 diffère des tables créées à partir de 5.6.4. Cela est dû à un changement de 5.6.4 qui permet à ces types d'avoir une partie fractionnaire, ce qui nécessite de 0 à 3 octets.
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
Depuis MySQL 5.6.4, le stockage pour YEAR et DATE reste inchangé. Cependant, TIME, DATETIME et TIMESTAMP sont représentés différemment. DATETIME est compressé plus efficacement, nécessitant 5 plutôt que 8 octets pour la partie non fractionnelle, et les trois parties ont une partie fractionnaire qui nécessite de 0 à 3 octets, en fonction de la précision des secondes fractionnaires des valeurs stockées.
Fractional Seconds Precision Storage Required
0 0 bytes
1, 2 1 byte
3, 4 2 bytes
5, 6 3 bytes
Par exemple, TIME (0), TIME (2), TIME (4) et TIME (6) utilisent respectivement 3, 4, 5 et 6 octets. TIME et TIME (0) sont équivalents et nécessitent le même stockage.
Pour plus d'informations sur la représentation interne des valeurs temporelles, consultez MySQL Internals: Important Algorithms and Structures.
Exigences de stockage des types de chaînes Dans le tableau suivant, M représente la longueur de colonne déclarée en caractères pour les types de chaînes non binaires et en octets pour les types de chaînes binaires. L représente la longueur réelle en octets d'une valeur de chaîne donnée.
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)