7.2.5 Types numériques

Tous les types entiers disposent d'un attribut optionnel UNSIGNED. Les valeurs non signées sont utilisées quand les nombres utilisé sont uniquement positifs, ou bien lorsqu'il faut pouvoir manipuler des nombres un peu plus grand de normalement.

Tous les types numériques disposent d'un attribut optionnel ZEROFILL. Cette option force l'affichage de tous les zéros non significatifs. Ainsi, dans une colonne de type INT(5) ZEROFILL, 4 sera affiché : 00004.

Quand une valeur trop grande est affectée à une colonne, MySQL limitera cette valeur au maximum qu'il peut stocker dans la colonne.

Par exemple, soit une colonne de type INT qui accueille des nombres dans l'intervalle -2147483648 to 2147483647. Lorsqu'on tente d'inserer -9999999999 dans cette colonne, MySQL utilisera automatiquement la plus petite valeur possible, soit -2147483648 . De même, Lorsqu'on tente d'inserer 9999999999 dans cette colonne, MySQL utilisera automatiquement la plus grande valeur possible, soit 2147483647.

Si une colonne est de type INT UNSIGNED, la taille de la colonne est la même, mais les extrémités sont différentes. Lors d'une tentative d'insertion, -9999999999 et 9999999999 deviendront respectivement 0 et 4294967296.

Ces conversions implicites sont signalées comme des alertes (``warnings''), lors des requêtes incluant ALTER TABLE, LOAD DATA INFILE, UPDATE et INSERT multi-lignes.

La taille maximale (M) et le nombre de décimales (D) sont utilisées lors du formatage et des calculs de la taille maximale d'une colonne.

MySQL tentera d'enregistrer n'importe quelle valeur, du moment que cette dernière peut être contenue dans la colonne, et malgré le dépassement de limite d'affichage. Par exemple, une colonne de type INT(4) peut afficher 4 caractères. Il est cependant possible d'insérer une valeur qui a plus que 4 chiffres, telle que 12345. La taille d'affichage est dépassée, mais 12345 est bien dans l'intervalle autorisé pour un INT. Donc, MySQL va enregistrer la valeur de 12345 . Lors d'une requête, MySQL retournera bien la vraie valeur, c'est à dire . 12345

Le type DECIMAL peut être considéré comme un type numérique (puisqu'il est synonyme de NUMERIC ), mais ce type est en fait enregistré comme une chaîne. Un caractère est utilisé pour chaque chiffre, pour la virgule et pour le signe moins``-''. Si D vaut 0, DECIMAL et NUMERIC ne contiennent ni virgule, ni partie décimale.

La taille maximale d'une valeur DECIMAL est la même que celle d'un DOUBLE, mais elle peut dépendre des choix de M et D. Par exemple, un DECIMAL déclaré tel que indique DECIMAL(4,2) que la valeur maximale aura 2 chiffres après la virgule. Etant donné la façon avec laquelle le type DECIMAL est enregistré, ce DECIMAL sera compris entre-.99 to 9.99, ce qui est nettement moins que les valeurs accessibles avec un DOUBLE.

Pour éviter certains problèmes d'arrondissement, MySQL ajuste toujours les valeurs qu'il enregistre au nombre de décimale de la colonne. Ainsi, pour une colonne de type FLOAT(8,2)., le nombre de décimale est 2. Donc, un nombre tel que 2.333 sera arrondi à 2.33, puis enregistré.