La première raison est d'optimiser l'espace occupé par la base de données. En général, plus la base est compacte, plus les performances sont élevées.
La deuxième raison est de garantir l'intégrité et la cohérence des données. En optant pour un type de donnée strict et prévu au plus juste, une valeur incorrecte sera automatiquement refusée lors de l'insertion d'un nouvel enregistrement.
Choisir un champ MySql
Le choix d'une architecture pour sa base de donnée est déterminant. En plus de la répartition des valeurs dans un ensemble de table, le choix du type de champs au plus proche des valeurs attendues peut également apporter des gains de performance.Type Int: nombre entier
Champs | Intervalle | Taille |
TINYINT | -128 a 127 | 1 octet |
SMALLINT | - 32 768 a 32 767 | 2 octet |
MEDIUM INT |
-8 388 608 a 8 388 607 | 3 octet |
INT | -2 147 483 648 a 2 147 483 647 | 4 octet |
BIGINT | -9 223 372 036 854 775 808 a 9 223 372 036 854 775 807 |
8 octet |
- privilégier le type INT dans la définition des champs d'une table, ce type occupe l'espace le plus faible et offre les meilleures performances si le champs en définit en tant qu'index,
- en fixant l'attribut unsigned, les valeurs seront toujours positives. L'intérêt est de doubler la capacité de stockage du type. Par exemple, l'intervalle de TINYINT passe de 0 a 255 avec l'attribut unsigned.
Type String : chaine de caractère
Champs | Intervalle | Taille |
CHAR(x) | 0 a 255 | x octet |
VARCHAR(x) | 0 a 255 | x octet +1 |
TINYTEXT et TINYBLOB | 0 a 255 | x octet +1 |
TEXT et BLOB | 0 a 65 535 | x octet +2 |
MEDIUMTEXT et MEDIUMBLOB | 0 a 16 777 215 | x octet +3 |
LONGTEXT et LONGBLOB | 0 a 4 294 967 296 | x octet +4 |
- a première vue les types CHAR et VARCHAR semblent identiques. En fait, une valeur stockée dans un champ CHAR occupe toujours la taille maximale définie en x contrairement a VARCHAR. En contre-partie, les performances du type CHAR sont supérieurs a celle des données en VARCHAR.
Type Date et Heure
Champs | Intervalle | Format | Taille |
DATE | '1000-01-01' a '9999-12-31' | YYYY-MM-DD | 3 octets |
DATETIME | '1000-01-01 00:00:00' a '9999-12-31 23:59:59' | YYYY-MM-DD HH:MM:SS | 8 octets |
TIME | '00:00:00' a '23:59:59' | HH:MM:SS | 3 octets |
TIMESTAMP | 19700101000000 a 20380119041407 | YYYYMMDDHHMMSS | 4 octets |
En complément aux 3 types de champ les plus courants, la documentation Mysql est consultable en ligne en détaillant chaque type.
fds