Maison  >  Article  >  base de données  >  Explication détaillée du problème de valeur de longueur du type MySQL int

Explication détaillée du problème de valeur de longueur du type MySQL int

藏色散人
藏色散人avant
2019-09-19 10:01:353442parcourir

Que signifie la longueur après le type int lorsque MySQL crée une table ? La largeur maximale de la colonne est-elle autorisée à stocker des valeurs ? Pourquoi puis-je stocker 10 100 1000 même si je le règle sur int (1) ?

Même si je savais à l'époque que la longueur de int (1) ne représentait pas la largeur de stockage autorisée, je ne l'ai pas fait. avoir une explication raisonnable. En d’autres termes, je n’ai pas vraiment étudié ce que représente cette longueur. J’utilise habituellement int (11), et je ne sais pas pourquoi il faut 11 bits. J'ai donc vérifié certaines informations sur Internet et lu attentivement ce que disait le manuel mysql sur le type de données int

Recommandation : "Tutoriel mysql"

Ce qui suit sont chacun. stockage et plage d'un type entier (extrait du manuel mysql)

Explication détaillée du problème de valeur de longueur du type MySQL int

Le tableau comporte quatre colonnes : type de champ, nombre d'octets occupés, valeur minimale autorisée à être stockée, Le valeur maximale autorisée à être stockée.

Prenons le type int comme exemple :

Le type int occupe 4 octets. Les étudiants qui ont étudié les principes informatiques doivent savoir que byte (byte) ne l'est pas. C'est la plus petite unité de stockage informatique. Il existe également une unité plus petite qu'un octet, qui est un bit. Un bit représente un 0 ou un 1 ; 8 bits constituent généralement un octet ; représente l'octet, le bit est représenté par un b minuscule

Conversion des unités de stockage informatique :

1B=8b

1KB=1024B

1MB= 1024KB

Ensuite, selon le nombre d'octets que le type int permet de stocker est de 4 octets, nous pouvons calculer que la valeur minimale que le type int UNSIGNED (non signé) peut stocker est de 0, et la valeur maximale est de 4294967295 ( c'est-à-dire 4B=32b, la valeur maximale est composée de 32 uns);

Parlons ensuite de la longueur du champ lorsque nous construisons la table.

CREATE TABLE test (
id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
number INT( 5 ) NOT NULL
) ENGINE = MYISAM ;

Table de test Prenons le champ numérique comme exemple . Vous pouvez voir que ce que j'ai construit est int (5)

Explication détaillée du problème de valeur de longueur du type MySQL int

Dans le manuel MySQL, cette longueur/valeur est représentée par "M". Des amis prudents auraient dû remarquer cette phrase dans le manuel mysql : M indique la largeur d'affichage maximale. La largeur d’affichage effective maximale est de 255. La largeur d'affichage n'a rien à voir avec la taille de stockage ou la plage de valeurs contenues dans le type

Cette phrase ne semble pas facile à comprendre, car il y a ici un mot-clé qui nous confond facilement, "maximum ; display width" Notre première réaction C'est la largeur maximale de la valeur pouvant être stockée dans ce champ. Je pensais que si nous construisions int (1), nous ne pourrions pas stocker les données 10. Ce n'est pas le cas

Nous pouvons simplement comprendre ce M=5 car nous avons créé cette longueur pour en informer la base de données MYSQL. notre champ. La largeur des données stockées est de 5 chiffres. Bien sûr, si ce n'est pas 5 chiffres (tant qu'ils sont dans la plage de stockage de ce type), MYSQL peut également les stocker normalement. marqué en rouge ci-dessus.

Nous changeons "l'attribut" de ce champ en UNSIGNED ZEROFILL et voyons l'effet.

Explication détaillée du problème de valeur de longueur du type MySQL int

Nous voyons que maintenant mon champ numérique a une longueur (M) = 5, attribut = UNSIGNED ZEROFILL (non signé, utilisez 0 pour remplir le nombre de chiffres). Après avoir défini cet attribut, lorsque j'insère des données dans le tableau, le système remplira automatiquement le champ numérique M avec moins de 5 chiffres avec 0 sur le côté gauche ; l'effet est le suivant

Explication détaillée du problème de valeur de longueur du type MySQL int

Il y a aussi une phrase dans le manuel "Quand mysql génère des tables temporaires pour certaines jointures complexes, vous pouvez rencontrer des problèmes, car dans ce cas, mysql Trust que toutes les valeurs conviennent à la largeur de colonne d'origine". Cela me fait également me demander comment définir cette largeur de manière appropriée ?

Mais une chose que vous devez savoir clairement après avoir lu ce document est que la longueur M n'a rien à voir avec la taille du numéro numérique que vous stockez.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer