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é.