Heim  >  Artikel  >  Datenbank  >  Detaillierte Erläuterung des Längenwertproblems des MySQL-Int-Typs

Detaillierte Erläuterung des Längenwertproblems des MySQL-Int-Typs

藏色散人
藏色散人nach vorne
2019-09-19 10:01:353395Durchsuche

Was bedeutet die Länge nach dem Typ int, wenn MySQL eine Tabelle erstellt? Ist die maximale Breite, die die Spalte zum Speichern von Werten zulässt? Warum kann ich 10,100,1000 speichern, auch wenn ich es auf int (1) eingestellt habe?

Obwohl ich damals wusste, dass die Länge von int (1) nicht der zulässigen Speicherbreite entspricht, wusste ich es nicht Habe eine vernünftige Erklärung. Mit anderen Worten, ich habe nicht wirklich untersucht, was diese Länge darstellt. Normalerweise verwende ich int (11) und weiß nicht, warum es 11 Bits benötigt. Also habe ich einige Informationen im Internet überprüft und sorgfältig gelesen, was im MySQL-Handbuch über den int-Datentyp steht Speicher und Bereich eines Integer-Typs (aus dem MySQL-Handbuch)

Die Tabelle hat insgesamt vier Spalten: Feldtyp, Anzahl der belegten Bytes, zulässiger Mindestwert gespeichert, Der maximal zulässige Wert, der gespeichert werden darf.

Nehmen wir den Typ int als Beispiel:

Detaillierte Erläuterung des Längenwertproblems des MySQL-Int-TypsDer Typ int belegt 4 Bytes. Schüler, die Computerprinzipien studiert haben, sollten dieses Byte kennen ) ist nicht die kleinste Einheit des Computerspeichers. Es gibt auch eine kleinere Einheit als ein Byte. Ein Bit stellt im Allgemeinen eine 0 oder eine 1 dar; B. Um Byte darzustellen, wird Bit durch Kleinbuchstaben b dargestellt

Konvertierung von Computerspeichereinheiten:

1B=8b

1KB=1024B

1MB = 1024 KB

Dann können wir entsprechend der Anzahl der Bytes, die der Typ int speichern kann, 4 Bytes betragen, dass der minimale Wert, den der Typ int UNSIGNED (ohne Vorzeichen) speichern kann, 0 und der maximale Wert ist ist 4294967295 (d. h. 4B=32b, der Maximalwert besteht aus 32 Einsen);

Als nächstes sprechen wir über die Feldlänge, wenn wir die Tabelle erstellen.

CREATE TABLE test (
id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
number INT( 5 ) NOT NULL
) ENGINE = MYISAM ;

Testtabelle Nehmen Sie das Zahlenfeld Als Beispiel können Sie sehen, dass das, was ich erstellt habe, int (5) ist.

Im MySQL-Handbuch wird diese Länge/dieser Wert durch „M“ dargestellt. Aufmerksamen Freunden dürfte dieser Satz im MySQL-Handbuch aufgefallen sein: M gibt die maximale Anzeigebreite an. Die maximale effektive Anzeigebreite beträgt 255. Die Anzeigebreite hat nichts mit der Speichergröße oder dem im Typ enthaltenen Wertebereich zu tun.

Dieser Satz scheint nicht leicht zu verstehen, da es hier ein Schlüsselwort gibt, das uns leicht verwirrt: „Maximum“. Anzeigebreite“ Unsere erste Reaktion Es ist die Breite des Maximalwerts, der in diesem Feld gespeichert werden kann. Ich dachte, wenn wir int (1) einbauen würden, könnten wir die Daten 10 nicht speichern.

Detaillierte Erläuterung des Längenwertproblems des MySQL-Int-TypsWir können dieses M=5 einfach verstehen, da wir diese Länge erstellt haben, um die MYSQL-Datenbank darüber zu informieren Die Breite der gespeicherten Daten beträgt natürlich 5 Ziffern (sofern sie innerhalb des Speicherbereichs dieses Typs liegen). Dies kann auch die Wörter erklären oben rot markiert.

Wir ändern das „Attribut“ dieses Feldes in UNSIGNED ZEROFILL und sehen den Effekt.

Wir sehen, dass es jetzt mein Nummernfeld ist hat Länge (M)=5, Attribut= UNSIGNED ZEROFILL (ohne Vorzeichen, verwenden Sie 0, um die Anzahl der Ziffern zu füllen). Nach dem Festlegen dieses Attributs füllt das System beim Einfügen von Daten in die Tabelle automatisch das Zahlenfeld M mit kleiner als 5 Ziffern mit 0 auf der linken Seite; der Effekt ist wie folgt

Detaillierte Erläuterung des Längenwertproblems des MySQL-Int-Typs

Es gibt auch einen Satz im Handbuch „Wenn MySQL temporäre Tabellen für einige komplexe Verknüpfungen (Joins) generiert“ , kann es zu Problemen kommen, denn in diesem Fall mysql Vertraue darauf, dass alle Werte für die ursprüngliche Spaltenbreite geeignet sind. Da frage ich mich auch, wie man diese Breite richtig einstellt?

Aber eines sollten Sie nach der Lektüre dieses Dokuments klar wissen: Die Länge M hat nichts mit der Größe der von Ihnen gespeicherten numerischen Zahl zu tun.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Längenwertproblems des MySQL-Int-Typs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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