Heim  >  Artikel  >  Datenbank  >  Was sind die Unterschiede zwischen int(1) und int(10) in MySQL?

Was sind die Unterschiede zwischen int(1) und int(10) in MySQL?

WBOY
WBOYnach vorne
2023-05-26 11:42:581835Durchsuche

confusion

Ich bin vor Kurzem auf ein Problem gestoßen. Ich muss ein Feld „user_id“ zu einer Tabelle hinzufügen. Das Feld „user_id“ ist möglicherweise sehr groß, daher habe ich einen MySQL-Arbeitsauftrag zur Änderung der Tabelle „user_id“ übermittelt int(1) . Nachdem er meinen SQL-Arbeitsauftrag gesehen hatte, sagte der Leiter: „Ich fürchte, das von Ihnen festgelegte int(1) reicht möglicherweise nicht aus“, und begann dann mit der Erklärung.

Dies ist nicht das erste Mal, dass ich auf dieses Problem stoße. Einige Leute, die auf dieses Problem gestoßen sind, machen diesen Job seit mehr als 5 Jahren. Da ich oft sehe, dass Kollegen ständig int(10) verwenden, habe ich das Gefühl, dass die Verwendung von int(1) die Obergrenze des Feldes einschränkt. Dies ist definitiv nicht der Fall.

Data Talk

Wir wissen, dass int 4 Bytes in MySQL belegt, daher beträgt der Maximalwert für unsigned int 2^32-1 = 4294967295, also fast 40 Milliarden Kann dieser Maximalwert nicht durch die Verwendung von int(1) erreicht werden?

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

Das ID-Feld ist ein unsigned int(1), lassen Sie mich einen Maximalwert einfügen, um es zu sehen.

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

Sie können sehen, dass es erfolgreich ist, was bedeutet, dass die Zahl nach int keinen Einfluss auf die von int selbst unterstützte Größe hat. Es gibt keinen Unterschied zwischen int(1), int(2). .int(10).

Zero Padding

Im Allgemeinen ist die Zahl nach int nur wirksam, wenn sie mit Zerofill verwendet wird. Schauen wir uns zunächst ein Beispiel an:

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

Beachten Sie, dass nach int(4) eine Nullfüllung hinzugefügt wird. Fügen wir zunächst 4 Daten ein.

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

Fügen Sie 4 Datenelemente ein, 1, 10, 100 und 1000, und fragen Sie dann ab:

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

Durch die Daten können wir das int(4) finden + Zerofill hat Mängel implementiert. Für das Phänomen des 4-Bit-Auffüllens mit Nullen ist int(4) allein nutzlos.
Und für 0001 ist der zugrunde liegende Speicher immer noch 1, aber der angezeigte wird mit 0 gefüllt.

Das obige ist der detaillierte Inhalt vonWas sind die Unterschiede zwischen int(1) und int(10) in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen