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

WBOY
Lepaskan: 2023-05-26 11:42:58
ke hadapan
1840 orang telah melayarinya

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;
Salin selepas log masuk

Medan id ialah int(1) yang tidak ditandatangani.

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

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;
Salin selepas log masuk

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
Salin selepas log masuk

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)
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan