Heim > Datenbank > MySQL-Tutorial > Hauptteil

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

WBOY
Freigeben: 2023-05-26 11:42:58
nach vorne
1825 Leute haben es durchsucht

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;
Nach dem Login kopieren

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)
Nach dem Login kopieren

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;
Nach dem Login kopieren

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
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!