web-dev-qa-db-fra.com

Quelle est la taille de la colonne de int (11) dans mysql en octets?

Quelle est la taille de la colonne de int(11) dans mysql en octets?

Et valeur maximale pouvant être stockée dans cette colonne?

398
Gaurav

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

569
Matt MacLean

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.

118
priyabagus

Selon ici , int(11) occupera 4 octets, soit 32 bits, avec une valeur maximale de 2^(31) = 2147483648 et une valeur -2147483648min. Un bit est pour le signe.

99
Santosh Linkha

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:

  • accepte toujours une valeur de 100
  • still display une valeur de 100 lors de la sortie (pas 0 ou 00)
  • le display width sera la largeur de la plus grande valeur sortie de la requête select.

La seule chose que le (2) va faire est si zerofill est également spécifié :

  • une valeur de 1 sera affichée 01
  • Lors de l'affichage des valeurs, la colonne aura toujours une largeur de de la valeur maximale possible de la colonne qui correspond à 10 chiffres pour un entier, au lieu de la largeur minimale requise pour afficher la plus grande valeur que la colonne doit afficher dans cette requête de sélection spécifique, qui pourrait être beaucoup plus petite.
  • La colonne peut toujours prendre et afficher une valeur dépassant la longueur, mais ces valeurs ne seront pas précédées de 0.

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.

31
Programster

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.

29
ks1322

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

15
shashi009

Bien que cette réponse soit peu probable, je pense que la clarification suivante mérite d’être apportée: 

  • le (n) derrière un type de données entier dans MySQL spécifie la largeur d'affichage
  • la largeur d'affichage NE limite PAS la longueur du nombre retourné par une requête
  • la largeur d'affichage NE LIMITE le nombre de zéros remplis pour une colonne remplie de zéros, de sorte que le nombre total correspond à la largeur d'affichage (tant que le nombre réel ne dépasse pas la largeur d'affichage, auquel cas le nombre est affiché tel quel)
  • la largeur d'affichage est également conçue comme un outil utile permettant aux développeurs de savoir à quelle longueur la valeur doit être complété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

10
MER

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

5
Sachin Agrawal

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