Article mis à jour le : 05-05-2022
Un récapitulatif des différents types de champs pour bien construire votre base de données, avec des exemples appliqués à MySQLEncore un article sur les règles à suivre pour bien concevoir votre base de données, il faut notamment bien choisir le type de ses données.
Type | Nombre d'octets | Minimum | Maximum |
---|---|---|---|
TINYINT | 1 | -128 | 127 |
SMALLINT | 2 | -32768 | 32767 |
MEDIUMINT | 3 | -8388608 | 8388607 |
INT | 4 | -2147483648 | 2147483647 |
BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
Les paramètres:
Il existe cinq mots-clés pour stocker des nombres décimaux dans une base de données : DECIMAL, NUMERIC, FLOAT, REAL et DOUBLE.
NUMERIC et DECIMAL
Dans MySQL, ils sont identiques. Ils acceptent deux paramètres
Exemple: DECIMAL (6,2) permet de stocker 6 chiffres significatifs, dont 2 après la virgule. A noter qu'écrire DECIMAL (6,0) revient à écrire DECIMAL(6)
FLOAT, DOUBLE ET REAL
Ils n'acceptent aucun paramètre, à l'exception de FLOAT (les mêmes que DECIMAL ET NUMERIC, mais ils sont optionnels). FLOAT utilise 4 octets pour le stockage, pareil pour REAL alors que double en utilise 8 lui permettant d'être plus précis. Cependant, MySQL stocke aussi REAL sur 8 octets.
ATTENTION : NUMERIC et DECIMAL stockent les valeurs sous forme de chaine de caractère, c'est donc la valeur exacte qui est enregistrée. Alors que FLOAT, DOUBLE et REAL stockent des nombres, sous une valeur approchée. Donc si vous voulez être précis, par exemple pour gérer votre argent, utilisez NUMERIC ou DECIMAL).
Ces deux-là permettent de stocker jusqu'à 255 caractères, que vous spécifiez en paramètre. La différence se fera au niveau du stockage en mémoire. CHAR(x) stockera toujours x caractères quitte à compléter avec des espaces vides, alors que VARCHAR sotckera jusqu'à x caractères + la taille du texte stocké.
Faites attention, car comme certains charset n'utilisent pas le même espace pour stocker un caractère, cela signfie qu'en fonction de celui choisi, vous ne pourrez pas stocker le même nombre de caractères qu'avec un autre dans un espace donné. Mais pour vous cela ne change rien, un varchar(50) vous permettra toujours de stocker 50 caractères, c'est juste au niveau de la place prise, en octets, que cela va changer.
Faites attention également, car dans le cas où il n'y a pas assez d'espace pour le stocker, votre texte sera tronqué!
Si vous souhaitez stocker plus de 255 caractères, il faut vour rabattre sur le type TEXT :
EDIT : la dernière version de MySQL semble avoir repoussé toutes les limites mentionnées ci-dessus!
Type | Longueur Max. | Mémoire utilisée |
---|---|---|
TINYTEXT | 2^8 octets | Longueur de la chaîne + 1 octet |
TEXTE | 2^16 | Longueur de la chaîne + 2 octets |
MEDIUMTEXT | 2^24 | Longueur de la chaîne + 3 octets |
LONGTEXT | 2^32 | Longueur de la chaîne + 4 octets |
Les chaînes de type binaire permettent de stocker directement les octets sans interpreter ce qu'ils représentent. Cela permet donc de stocker des fichiers comme des images par exemple.
Leur taille et leur utilisation est assez similaire aux CHAR, VARCHAR et TEXT :
Pour rappel, BLOB = Binary Large Object.
Il existe 5 types temporels avec MySQL
Il permet de stocker, dans l'ordre, l'année, le mois et le jour. On peut le faire sous différents formats, par exemple :
Même chose que DATE mais avec l'heure en plus. On peut stocker aussi sous différents formats :
Il permet de stocker une heure précise ou encore un intervalle de temps, sans adaptation (par exemple si vous sotckez 28 heures, vous stockerez bien 28 heures). Là aussi, il existe plusieurs formats :
Stocke une année, sur un octet, soit 256 valeurs, donc pour MySQL minimum 1901 et maximum 2155.
En règle générale, le TIMESTAMP d'une date représente le nombre de secondes écoulées depuis le 1er janvier 1970 00:00:00 (UTC) ainsi que la date en question.
Mais dans MySQL, cela ne fait que stocker le DATETIME de la date au format numérique (Le DATETIME le fait au format chaine de caractère).
Exemple : 21 janvier 2015
DATETIME : 2015-01-21 15:28:32
TIMESTAMP 20150121152832
Voilà pour l'essentiel. Un dernier point : pensez à l'évolutivité de votre base! Une anecdote, hors du commun certes, mais parfaite pour illustrer l'idée : Youtube a dû modifier le type de données qui gère le compteur de vue de ses vidéos car l'une d'entre-elles était sur le point d'atteindre la limite du type du champ, sinon le compteur de vue aurait affiché des données incohérentes!