Quelle est la taille de la colonne de int(11)
dans mysql en octets?
Et la valeur maximale qui peut être stockée dans ces colonnes?
mysql
avant mon arrivée. Thx
Quelle est la taille de la colonne de int(11)
dans mysql en octets?
Et la valeur maximale qui peut être stockée dans ces colonnes?
mysql
avant mon arrivée. Thx
Réponses:
Un 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 à remplir lors de la sélection de données avec le client de ligne de commande mysql. 12345 stocké comme int(3)
affichera toujours 12345, mais s'il était stocké comme int(10)
il afficherait toujours comme 12345, mais vous auriez la possibilité de remplir les cinq premiers chiffres. Par exemple, si vous l' ZEROFILL
ajoutez, il s'affichera comme 0000012345.
... et la valeur maximale sera 2147483647 (signé) ou 4294967295 (non signé)
INT ( x ) ne fera la différence qu'en termes d'affichage , c'est-à-dire afficher le nombre en x chiffres, et non limité à 11. Vous le jumelez en utilisantZEROFILL
, qui ajoutera les zéros jusqu'à ce qu'il corresponde à votre longueur.
Donc, pour un nombre quelconque de x dansINT(x)
si la valeur stockée a moins de chiffres que x , ZEROFILL
ajoutera des zéros.
INT (5) ZEROFILL avec la valeur stockée de 32 affichera 00032
INT (5) avec la valeur stockée de 32 affichera 32
INT avec la valeur stockée de 32 affichera 32
si la valeur stockée a plus de chiffres que x , elle sera affichée telle quelle.
INT (3) ZEROFILL avec la valeur stockée de 250000 affichera 250000
INT (3) avec la valeur stockée de 250000 affichera 250000
INT avec la valeur stockée de 250000 affichera 250000
La valeur réelle stockée dans la base de données n'est pas affectée, la taille est toujours la même et tout calcul se comportera normalement.
Cela s'applique également à BIGINT, MEDIUMINT, SMALLINT et TINYINT.
ZEROFILL
.
Selon ici , int(11)
prendra 4 octets d'espace soit 32 bits d'espace avec une 2^(31) = 2147483648
valeur maximale et une -2147483648
valeur minimale. 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 stockage qu'elle prend en octets n'est définie que par le type, pas la longueur.
Beaucoup de ces réponses disent que la (11)
partie n'affecte que la largeur d'affichage, ce qui n'est pas exactement vrai, mais surtout.
Une définition int(2)
avec aucune ZEROFILL spécifiée sera:
100
100
sortie (pas 0
ou 00
)La seule chose à (2)
faire est que le zerofill soit également spécifié :
1
sera affichée 01
.La meilleure façon de voir toutes les nuances est d'exécuter:
CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`int1` int(10) NOT NULL,
`int2` int(3) NOT NULL,
`zf1` int(10) ZEROFILL NOT NULL,
`zf2` int(3) ZEROFILL NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `mytable`
(`int1`, `int2`, `zf1`, `zf2`)
VALUES
(10000, 10000, 10000, 10000),
(100, 100, 100, 100);
select * from mytable;
qui produira:
+----+-------+-------+------------+-------+
| id | int1 | int2 | zf1 | zf2 |
+----+-------+-------+------------+-------+
| 1 | 10000 | 10000 | 0000010000 | 10000 |
| 2 | 100 | 100 | 0000000100 | 100 |
+----+-------+-------+------------+-------+
Cette réponse est testée par rapport à MySQL 5.7.12 pour Linux et peut ou non varier pour d'autres implémentations.
Quelle est la taille de la colonne de int (11) dans mysql en octets?
(11)
- cet attribut de int
type de données n'a rien à voir avec la taille de la colonne. Il s'agit simplement de la largeur d'affichage du type de données entier. À partir du 11.1.4.5. Attributs de type numérique :
MySQL prend en charge une extension pour spécifier éventuellement la largeur d'affichage des types de données entiers entre parenthèses après le mot-clé de base pour le type. Par exemple, INT (4) spécifie un INT avec une largeur d'affichage de quatre chiffres.
Une bonne explication à cela peut être trouvée ici
Pour résumer: Le nombre N dans int (N) est souvent confondu par la taille maximale autorisée pour la colonne, comme il le fait 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 pour indiquer à MySQL à quelle largeur afficher la colonne lorsque les données de la table sont visualisées via MySQL console (lorsque vous utilisez l'attribut ZEROFILL).
Le nombre entre parenthèses indiquera à MySQL combien de zéros 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 remplira cette valeur avec des zéros jusqu'à ce que le nombre satisfasse le nombre entre parenthèses. ie 78 deviendra 00078 et 127 deviendra 00127. Pour résumer: Le nombre entre parenthèses est utilisé à des fins d'affichage.
D'une certaine manière, le nombre entre parenthèses est un peu inutile, sauf si vous utilisez l'attribut ZEROFILL.
Ainsi, la taille de l'int reste la même, c'est-à-dire -2147483648 à 2147483648 pour signé et 0 à 4294967295 pour non signé.(~ 2,15 milliards et 4,2 milliards, ce qui est l'une des raisons pour lesquelles les développeurs ignorent l'histoire derrière le numéro N entre parenthèses, car il n'affecte guère la base de données à moins qu'elle ne contienne plus de 2 milliards de lignes), et en termes d'octets serait de 4 octets .
Pour plus d'informations sur la taille / plage des types entiers, reportez-vous au manuel MySQL
Bien que cette réponse soit peu susceptible d'être vue, 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 de 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, consultez la liste et le lien: ( types: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT );
Cela dit, vous pouvez vous attendre à ce que la largeur d'affichage n'affecte pas les résultats d'une requête standard, sauf si les colonnes sont 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 les largeur d'affichage à utiliser pour un autre type de rembourrage.
Référence principale: https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean
n
, alors ... ouais, c'est du bullcrap. Il ne fait rien avec du zerofill.
Dans MySQL, l'entier int(11)
a une taille 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 aucun sens pour la plupart des applications: il ne restreint pas la plage de valeurs légale, mais spécifie simplement le nombre de caractères que les outils interactifs de MySQL réservent à des fins d'affichage. À des fins de stockage et de calcul, INT (1) est identique à INT (20).