Quelle est la taille de la colonne de int(11)
dans mysql en octets?
Et valeur maximale pouvant être stockée dans cette colonne?
Une INT
sera toujours de 4 octets quelle que soit la longueur spécifiée.
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).La longueur spécifie simplement le nombre de caractères à afficher lors de la sélection de données avec le client en ligne de commande mysql.
... et la valeur maximale sera 2147483647 (signé) ou 4294967295 (non signé)
INT (somenumber) fera la différence uniquement en termes d’affichage , c’est à indiquer dans le nombre entre 'somenumber' chiffres, et non limité à 11. Vous le jumelez avec ZEROFILL
, ce qui fera précéder les zéros jusqu'à ce qu'il corresponde à votre longueur
Notez que la valeur stockée dans la base de données n'est pas affectée, tout calcul se comportera toujours tel qu'il est.
Remarques :
si la valeur a moins de chiffres que 'somenumber', ZEROFILL
ajoutera des zéros.
INT (5) ZEROFILL avec la valeur stockée de 32 affichera 00032
INT (5) avec la valeur enregistrée 32 affichera 32
INTavec la valeur enregistrée 32 affichera 32
si la valeur a plus de chiffres que 'somenumber', la valeur enregistrée sera affichée.
INT (3) ZEROFILL avec la valeur stockée de 250000 affichera 250000
INT (3) avec la valeur stockée de 250000 affichera 250000
INTavec la valeur stockée de 250000 affichera 250000
La même chose s'applique à BIGINT, MEDIUMINT, SMALLINT et TINYINT.
Selon ici , int(11)
occupera 4 octets, soit 32 bits, avec une valeur maximale de 2^(31) = 2147483648
et une valeur -2147483648
min. Un bit est pour le signe.
Comme d'autres l'ont dit, les valeurs minimum/maximum que la colonne peut stocker et la quantité de mémoire qu'elle prend en octets sont uniquement définies par le type, pas la longueur.
Beaucoup de ces réponses disent que la partie (11)
n'affecte que la largeur d'affichage, ce qui n'est pas tout à fait vrai, mais surtout.
Une définition de int(2)
avec aucun zerofill spécifié will:
100
100
lors de la sortie (pas 0
ou 00
)La seule chose que le (2)
va faire est si zerofill est également spécifié :
1
sera affichée 01
. La meilleure façon de voir toutes les nuances est de courir:
CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`int1` int(10) NOT NULL,
`int2` int(3) NOT NULL,
`zerofill1` int(10) ZEROFILL NOT NULL,
`zerofill2` int(3) ZEROFILL NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `mytable`
(`int1`, `int2`, `zerofill1`, `zerofill2`)
VALUES
(10000, 10000, 10000, 10000),
(100, 100, 100, 100);
select * from mytable;
qui produira:
+----+-------+-------+------------+-----------+
| id | int1 | int2 | zerofill1 | zerofill2 |
+----+-------+-------+------------+-----------+
| 1 | 10000 | 10000 | 0000010000 | 10000 |
| 2 | 100 | 100 | 0000000100 | 100 |
+----+-------+-------+------------+-----------+
Notez que la largeur de la colonne int1
est bien inférieure à celle de zerofill2
même si sa longueur est plus grande.
Cette réponse est testée contre MySQL 5.7.12 pour Linux et peut varier ou non pour d'autres implémentations.
Quelle est la taille de la colonne de int (11) dans mysql en octets?
(11)
- cet attribut de type de données int
n'a rien à voir avec la taille de la colonne. C'est juste la largeur d'affichage du type de données entier. De 11.1.4.5. Attributs de type numérique :
MySQL supporte une extension pour spécifier éventuellement l'affichage largeur des types de données entiers entre parenthèses après le mot-clé base pour le type. Par exemple, INT (4) spécifie un INT avec un affichage largeur de quatre chiffres.
Une bonne explication à cela peut être trouvée ici
Pour résumer: le nombre N dans int (N) est souvent confondu avec la taille maximale autorisée pour la colonne, comme dans le cas de varchar (N).
Mais ce n'est pas le cas avec les types de données Integer - le nombre N entre parenthèses n'est pas la taille maximale de la colonne, mais simplement un paramètre indiquant à MySQL la largeur d'affichage de la colonne lors de l'affichage des données de la table via la console MySQL (lorsque vous utilisez l'attribut ZEROFILL).
Le nombre entre parenthèses indiquera à MySQL le nombre de zéros avec lesquels il faut remplir les entiers entrants. Par exemple: Si vous utilisez ZEROFILL sur une colonne définie sur INT (5) et que le nombre 78 est inséré, MySQL complétera cette valeur avec des zéros jusqu'à ce que le nombre corresponde au nombre indiqué entre parenthèses. c'est-à-dire que 78 deviendront 00078 et que 127 deviendra 00127. En résumé: le nombre entre parenthèses est utilisé à des fins d'affichage.
D'une certaine manière, le nombre entre parenthèses est inutile, sauf si vous utilisez l'attribut ZEROFILL.
Ainsi, la taille de l’entier resterait la même, c’est-à-dire -2147483648 à 2147483648 pour signé et 0 à 4294967295 pour non signé (~ 2,15 et 4,2 milliards, raison pour laquelle les développeurs ignorent l’histoire derrière le nombre N entre parenthèses, car elle n’affecte guère la base de données que si elle contient plus de 2 milliards de lignes), et en octets, il s'agirait de 4 octets.
Pour plus d'informations sur les types entiers taille/plage, reportez-vous à Manuel MySQL
Bien que cette réponse soit peu probable, je pense que la clarification suivante mérite d’être apportée:
UN PEU DE DÉTAIL
la largeur d’affichage est apparemment destinée à fournir des métadonnées sur le nombre de zéros à afficher dans un nombre rempli à zéro.
Il NE limite PAS réellement la longueur d'un nombre renvoyé par une requête si ce nombre dépasse la largeur d'affichage spécifiée.
Pour savoir quelle longueur/largeur est réellement autorisée pour un type de données entier dans MySQL, voir la liste & lien: ( types: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT );
Ceci étant dit, vous pouvez vous attendre à ce que la largeur d'affichage n'ait aucune incidence sur les résultats d'une requête standard, à moins que les colonnes ne soient spécifiées en tant que colonnes ZEROFILL.
OU
dans le cas où les données sont extraites dans une application et que cette application collecte la largeur d'affichage à utiliser pour une autre sorte de remplissage.
Référence principale: https://blogs.Oracle.com/jsmyth/entry/what_does_the_11_mean
Dans MySQL, int(11)
est un entier dont la taille est de 4 octets, ce qui correspond à 32 bits.
La valeur signée est: -2^(32-1) to 0 to 2^(32-1)-1
= -2147483648 to 0 to 2147483647
Les valeurs non signées sont: 0 to 2^32-1
= 0 to 4294967295
selon ce livre :
MySQL vous permet de spécifier une “largeur” pour les types entiers, tels que INT (11) . Cela n'a pas de sens pour la plupart des applications: cela ne restreint pas le plage légale de valeurs, mais spécifie simplement le nombre de caractères Les outils interactifs de MySQL se réserveront à des fins d’affichage. Pour À des fins de stockage et de calcul, INT (1) est identique à INT (20).