Bonjour à tous.
Lorsque l'on crée une table ou ajouter un champ de type int phpmyadmin demander la Taille/valeur?
A quoi ceci corespond t il?
Car la taille d'un int est définit par essence?
Version imprimable
Bonjour à tous.
Lorsque l'on crée une table ou ajouter un champ de type int phpmyadmin demander la Taille/valeur?
A quoi ceci corespond t il?
Car la taille d'un int est définit par essence?
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 :
Soit par exemple, vous déclarative est la suivante :Code:num integer(11) unsigned zerofill not null
si vous entrez la valeur "-15", MySql provoque un "out of range" car votre nombre est signé.Code:val integer(11) zerofill not null
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 :
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.Code:code_postal mediumint(5) unsigned not null
Si vous stockez ce code postal, à l'affichage vous aurez : "1000" sans zéro devant. Pour obtenir le bon affichage, vous devez déclarer :
et vous obtiendrez "01000".Code:code_postal mediumint(5) unsigned zerofill not null
Voici un exemple d'affichage :
Code:
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...
@+
En fait MySQmerde est incapable de mettre en œuvre les contraintes CHECK de la norme SQL permettant de limiter un nombre à certaines valeurs. Pour pallier à cela MySQLmerde à inventé la notion de taille de INT qui n'existe pas dans le langage SQL ou il existe les types SMALLINT, INT et BIGINT....
Ce n'est évidemment qu'un pis allé !
A lire sur les limitations de cet ersatz de SGBD non relationnel qu'est MySQmerde : http://blog.developpez.com/sqlpro/p9...oudre_aux_yeux
A +
Salut
je suis débutant dans mysql et je n'ai pas compris les réponses qui ont été données ici.
php my admin me demande la longueur de l'id INT et je ne sais pas quoi mettre pour créer la table.
Bonjour Programir
La taille réelle d'un integer dépend de son type
- TINYINT = 1 octet (8 bits) ;
- SMALLINT = 2 octets (16 bits) ;
- MEDIUMINT = 3 octets (24 bits) ;
- INT = 4 octets (32 bits) ;
- BIGINT = 8 octets (64 bits).
Par ailleurs, MySQL propose une taille d'affichage à paramétrer lors de la définition de la colonne dans l'ordre CREATE TABLE.
C'est cette taille d'affichage que vous devez renseigner.
Merci beaucoup ;)
C'est exactement ce qui m'interessait !