Ceci est une ancienne révision du document !


~~CLOSETOC~~

MySQL - Types de données

Comme la plupart des langages informatiques, SQL définie ses données selon certains types. Lorsqu'on définie une colonne dans une table, on doit définir le type de données qu'elle accueillera. Toutes les données de cette colonnes seront alors du même type, celui qui a été défini. Il est important de bien définir le type de données utilisé, une mauvaise définition pouvant entraîner :

  • des lenteurs d'exécutions.
  • une surconsommation de ressources.
  • des incompatibilités de commandes.
  • des résultats incohérents.
  • etc…

En SQL, on trouvera 3 types de données particuliers :

  • Les données numériques.
  • Les chaînes de caractères.
  • Les données temporelles.
Type Allocation en octets Valeur minimale Valeur maximale UNSIGNED min UNSIGNED max
TINYINT1-1281270255
SMALLINT2-3276832767065535
MEDIUMINT3-83886088388607016777215
INT, INTEGER4-2147483648214748364704294967295
BIGINT5-92233720368547758089223372036854775807018446744073709551615

<note important>Si on essaie de stocker un entier dans une trop grand pour le type défini, alors la valeur stockée sera la plus grande/petite valeur possible pour le type défini. Par exemple : Si on stocke l'entier 152968 dans un SMALLINT, la valeur réellement stockée sera 32767. Pour -152968, ce sera -32768.</note>

UNSIGNED

Par défaut, les valeurs des entiers peuvent être positives ou négatives, 0 étant au centre de la plage. En définissant la colonne comme UNSIGNED, 0 devient la valeur minimale de la plage, la plage de valeur négative disparaissant et augmentant d'autant la plage positive.

ZEROFILL

L'argument ZEROFILL, suivant la définition d'une colonne de type entier, permet d'imposer une taille minimale pour l'affichage des entiers de cette colonne. Cela signifie que si ZEROFILL est renseigné pour un valeur de INT(4), 12345 sera affiché 12345 mais 123 sera affiché 0123. La structure de déclaration pour ZEROFILL est :

TYPE(taille) ZEROFILL

Par exemple :

CREATE TABLE yourtable (x INT(8) ZEROFILL NOT NULL, y INT(8) NOT NULL);
INSERT INTO yourtable (x,y) VALUES
(1, 1),
(12, 12),
(123, 123),
(123456789, 123456789);
SELECT x, y FROM yourtable;
+-----------+-----------+
|         x |         y |
+-----------+-----------+
|  00000001 |         1 |
|  00000012 |        12 |
|  00000123 |       123 |
| 123456789 | 123456789 |
+-----------+-----------+

Nicolas THOREZ 2020/08/04 17:09 ~~CLOSETOC~~

  • mysql_type.1596558218.txt.gz
  • Dernière modification : 2020/08/04 18:23
  • de nekan