Salut à tous.
Ne confondez pas le stockage en mémoire de votre nombre et la présentation à l'affichage de ce même nombre.
Quand on utilise le type "integer", le stockage en mémoire est de 4 octets. Et cette allocation mémoire reste toujours la même !
Nous pouvons rencontrer deux cas, à savoir le
--> "integer unsigned", le nombre est non signé et va de 0 à 4.294.967.295.
--> "integer", le nombre est signé et va de -2.147.483.648 à +2.147.483.647.
A l'affichage et en tenant compte du signe, il y a au total 11 symboles, 10 en chiffres et 1 en signe.
C'est pourquoi, on trouve fréquemment cette déclarative "int(11)".
Vous comprenez maintenant que cela sert pour l'affichage !
Est-ce franchement utile ?
Dans la plupart des cas, cela ne sert strictement à rien.
Mais il existe parfois des exemples où afficher des zéros devant le nombre peut s'avérer pratique.
Comment l'utiliser ?
Cela s'utilise obligatoirement avec la déclarative "zerofill"
Si vous ne précisez pas cette déclarative, le nombre de chiffres à l'affichage ne sert à rien.
De plus, MySql exige que votre nombre soit non signé. La bonne façon de faire est la suivante :
num integer(11) unsigned zerofill not null
Soit par exemple, vous déclarative est la suivante :
val integer(11) zerofill not null
si vous entrez la valeur "-15", MySql provoque un "out of range" car votre nombre est signé.
En effet, avec un "zerofill", mysql force le nombre à "unsigned" obligatoirement.
Dans quel cas, doit-on l'utiliser ?
Avec le code postal. Prenons celui de la ville de "Bourg en Bresse" qui est "01000". Soit la déclarative suivante :
code_postal mediumint(5) unsigned not null
Inutile de mettre un "integer" car votre code postal ne dépassera pas les "99999" et vous risquez de faire du gaspillage de mémoire pour rien.
Si vous stockez ce code postal, à l'affichage vous aurez : "1000" sans zéro devant. Pour obtenir le bon affichage, vous devez déclarer :
code_postal mediumint(5) unsigned zerofill not null
et vous obtiendrez "01000".
Voici un exemple d'affichage :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| --------------
SET AUTOCOMMIT = 0
--------------
--------------
START TRANSACTION
--------------
--------------
DROP DATABASE IF EXISTS `base`
--------------
--------------
CREATE DATABASE `base`
DEFAULT CHARACTER SET `latin1`
DEFAULT COLLATE `latin1_general_ci`
--------------
--------------
DROP TABLE IF EXISTS `test`
--------------
--------------
create table `test` (
`id` integer(20) unsigned NOT NULL,
`val` integer(20) unsigned ZEROFILL NOT NULL
) ENGINE=InnoDB
DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
ROW_FORMAT=COMPRESSED
--------------
--------------
insert into `test` (`id`,`val`) values
(9,9),(99,99),(999,999),(9999,9999)
--------------
--------------
select * from test
--------------
+------+----------------------+
| id | val |
+------+----------------------+
| 9 | 00000000000000000009 |
| 99 | 00000000000000000099 |
| 999 | 00000000000000000999 |
| 9999 | 00000000000000009999 |
+------+----------------------+
--------------
COMMIT
--------------
--------------
SET AUTOCOMMIT = 1
--------------
Appuyez sur une touche pour continuer... |
@+
Partager