8.Les types SQL

8.2.Les types SQL numériques (INTEGER, FLOAT, etc.)

8.2.1.Introduction

En ce qui concerne les types numériques, SQL distingue 2 grandes catégories: les entiers et les nombres décimaux (aussi appelés flottants).
Généralement, la déclaration de type utilisée par défaut pour un entier est INTEGER et FLOAT pour un nombre décimal.
La sélection d'un type entier peut (et doit) être complétée par une information précisant si celui-ci peut être négatif ou pas. S'il ne peut être négatif on placera le terme UNSIGNED après le nom du type. Ex INTEGER pour un entier signé, INTEGER UNSIGNED pour un entier positif.
Les types INTEGER etFLOAT se déclinent en plusieurs variantes selon la valeur maximale (ou minimale) que le champ peut atteindre et selon la précision que l'on souhaite pouvoir atteindre (correspondant en gros au nombres de chiffres après la virgule).
Ainsi, pour exemple, pour stocker dans une base MySQL une valeur comprise entre -128 et 127 (ou entre 0 et 255) on choisira un type TINYINT (ou TINYINT UNSIGNED) qui a l'avantage d'occuper le minimum de place en base (1 seul octet) à l'autre extrème si l'on souhaite pouvoir stocker un entier extrèmement grand on optera plutôt pour un type BIGINT (occupant 8 octets)
Les types ne portent pas toujours les mêmes noms d'un serveur de base de données à l'autre. Ainsi BIGINT est aussi appelé INT8 ou NUMBER(19,0) dans d'autres bases.

8.2.2.Les types entiers

Les valeurs que peuvent prendre ces champs sont intimement liés à leur occupation disque.
Entiers
Type Min Max Taille en octet
TINYINT -128 127 1
TINYINT UNSIGNED 0 255 1
SMALLINT INT2 -32768 32767 2
SMALLINT UNSIGNED INT2 UNSIGNED 0 65535 2
MEDIUMINT -8388608 8388607 3
MEDIUMINT UNSIGNED 0 16777215 3
INT INT4 INTEGER -2147483648 2147483647 4
INT UNSIGNED INT4 UNSIGNED INTEGER UNSIGNED 0 4294967295 4
BIGINT INT8 -9223372036854775808 9223372036854775807 8
BIGINT UNSIGNED INT8 UNSIGNED 0 18446744073709551615 8
Légende: SQL92 MySQL PostgreSQL
rem
  • Avec MySQL, lorsque l'on déclare un type pour un champ, on peut également y associer un mode "d'affichage". Ainsi à l'ensemble de ces types on peut associer le mot clé ZEROFILL pour compléter le nombre par des zeros jusqu'a avoir un affichage sur N chiffres où N est le nombre de chiffre du plus grand nombre positif du type sélectionné. Et on peut également fixer cette valeur de N en l'indiquant entre parenthèse.
Affichage du nombre 23 pour un champ de type
INT 23
INT ZEROFILL 0000000023
INT(4) ZEROFILL 0023
Ce qu'il faut retenir : Avant de choisir un type entier, il faut se poser les questions suivantes :
  • Ai-je besoin de stocker des nombres négatifs ?
  • Quel est le plus grand nombre que je serai amené à stocker ?
Si vous souhaitez, par exemple, stocker le nombre de but marqués par votre équipe de foot préférée lors de leur dernier match alors inutile de choisir un type BIGINT optez plutot pour un TINYINT. Ainsi, chaque enregistrement occupera 8 fois moins de place. Même si ce n'est pas vraiment nécessaire ici, optez également pour un type UNSIGNED puisque ce nombre ne sera jamais négatif (on ne compte pas les buts contre son camp :-) ) on ne sait jamais s'il y a plus de 127 buts de marqués.
Le type BIGINT ne doit être utilisé que dans des cas bien spécifiques.
rem
  • Sous PostgreSQL c'est le type INT qui est utilisé par le type SERIAL (compteur).

8.2.3.Les types réels

Nombres décimaux
Type Min Max négatif 0 Min positif Max Taille en octet
FLOAT FLOAT4 -3.402823466E+38 -1.175494351E-38 0 1.175494351E-38 3.402823466E+38 4
DOUBLE DOUBLE PRECISION REAL FLOAT8 -1.7976931348623157E+308 -2.2250738585072014E-308 0 2.2250738585072014E-308 1.7976931348623157E+308
Ce qu'il faut retenir :
Avant de choisir un type décimal, il faut se poser les questions suivantes
  • Quel est le plus grand nombre que je serai amené à stocker ?
  • Quel est le plus petit nombre que je serai amené à stocker ?
  • De quelle précision (nombre de chiffres après la virgule) aurais-je besoin ?