Rumah  >  Artikel  >  pangkalan data  >  Apakah perbezaan antara int(1) dan int(10) dalam mysql

Apakah perbezaan antara int(1) dan int(10) dalam mysql

WBOY
WBOYke hadapan
2023-05-26 11:42:581835semak imbas

Kekeliruan

Baru-baru ini saya menghadapi masalah Saya perlu menambahkan medan user_id pada jadual Medan user_id mungkin sangat besar, jadi saya menyerahkan jadual kerja mysql alter xxx ADD user_id int(1. ). Selepas melihat pesanan kerja SQL saya, ketua berkata: Saya khuatir int(1) yang anda tetapkan mungkin tidak mencukupi, dan kemudian mula menerangkan.

Ini bukan kali pertama saya hadapi masalah ini Beberapa orang yang menghadapi masalah ini telah melakukan kerja ini selama lebih dari 5 tahun. Termasuk bahawa saya sering melihat rakan sekerja menggunakan int(10) sepanjang masa, saya merasakan bahawa menggunakan int(1) akan mengehadkan had atas medan Ini pastinya tidak berlaku.

Data bercakap

Kami tahu bahawa int menduduki 4 bait dalam mysql, jadi untuk int yang tidak ditandatangani, nilai maksimum ialah 2^32-1 = 4294967295, iaitu hampir 4 bilion untuk digunakan Jika int(1) digunakan, tidakkah nilai maksimum ini boleh dicapai?

CREATE TABLE `user` (
  `id` int(1) unsigned NOT NULL AUTO_INCREMENT,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

Medan id ialah int(1) yang tidak ditandatangani.

mysql> INSERT INTO `user` (`id`) VALUES (4294967295);
Query OK, 1 row affected (0.00 sec)

Anda dapat melihat bahawa ia berjaya, yang bermaksud bahawa nombor selepas int tidak menjejaskan saiz yang disokong oleh int itu sendiri. Tiada perbezaan antara int(1), int(2)...int (10).

Pelapik sifar

Secara amnya, nombor selepas int hanya berkesan apabila digunakan dengan zerofill. Mari lihat contoh dahulu:

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

Perhatikan bahawa isian sifar ditambah selepas int(4) Mari masukkan 4 keping data dahulu.

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

Masukkan 4 keping data, masing-masing 1, 10, 100, 1000, dan kemudian kami bertanya:

mysql> select * from user;
+------+
| id   |
+------+
| 0001 |
| 0010 |
| 0100 |
| 1000 |
+------+
4 rows in set (0.00 sec)

Melalui data, kita dapati bahawa int(4) + zerofill merealisasikan pengisian 0 untuk fenomena kurang daripada 4 digit, int(4) sahaja tidak berguna.
Dan untuk 0001, storan asas masih 1, tetapi yang dipaparkan akan diisi dengan 0.

Atas ialah kandungan terperinci Apakah perbezaan antara int(1) dan int(10) dalam mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam