Maison > base de données > tutoriel mysql > Quelles sont les différences entre int(1) et int(10) dans MySQL

Quelles sont les différences entre int(1) et int(10) dans MySQL

WBOY
Libérer: 2023-05-26 11:42:58
avant
1876 Les gens l'ont consulté

Confusion

J'ai récemment rencontré un problème. Je dois ajouter un champ user_id à une table. Le champ user_id peut être très grand, j'ai donc soumis un ordre de travail mysql alter table xxx ADD user_id int(1). Après avoir vu mon bon de travail SQL, le leader a dit : J'ai peur que le int(1) que vous avez défini ne soit pas suffisant, puis a commencé à expliquer.

Ce n'est pas la première fois que je rencontre ce problème. Certaines personnes qui ont rencontré ce problème font ce métier depuis plus de 5 ans. En incluant le fait que je vois souvent des collègues utiliser int(10) tout le temps, je pense que l'utilisation de int(1) limitera la limite supérieure du champ. Ce n'est certainement pas le cas.

Les données parlent

Nous savons que int occupe 4 octets dans MySQL, donc pour un int non signé, la valeur maximale est 2^32-1 = 4294967295, soit près de 4 milliards. Est-il possible d'utiliser int(1 Has) ? ce maximum a-t-il été atteint ?

CREATE TABLE `user` (
  `id` int(1) unsigned NOT NULL AUTO_INCREMENT,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
Copier après la connexion

Le champ id est un int(1) non signé, permettez-moi d'insérer une valeur maximale pour voir.

mysql> INSERT INTO `user` (`id`) VALUES (4294967295);
Query OK, 1 row affected (0.00 sec)
Copier après la connexion

Vous pouvez voir que c'est réussi, ce qui signifie que le nombre après int n'affecte pas la taille prise en charge par int lui-même. Il n'y a aucune différence entre int(1), int(2)...int(10).

Zero padding

Généralement, le nombre après int n'est efficace que lorsqu'il est utilisé avec zerofill. Regardons d'abord un exemple :

CREATE TABLE `user` (
  `id` int(4) unsigned zerofill NOT NULL AUTO_INCREMENT,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
Copier après la connexion

Notez qu'un remplissage à zéro est ajouté après int(4). Insérons d'abord 4 éléments de données.

mysql> INSERT INTO `user` (`id`) VALUES (1),(10),(100),(1000);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0
Copier après la connexion

Insérez 4 éléments de données, respectivement 1, 10, 100 et 1000, puis interrogeons :

mysql> select * from user;
+------+
| id   |
+------+
| 0001 |
| 0010 |
| 0100 |
| 1000 |
+------+
4 rows in set (0.00 sec)
Copier après la connexion

Grâce aux données, nous pouvons constater que int(4) + zerofill réalise le phénomène de remplissage de 0 lorsqu'il y a moins de 4 chiffres Int(4) seul C'est inutile.
Et pour 0001, le stockage sous-jacent est toujours 1, mais celui affiché sera rempli de 0.

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal