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