Sind die Wertebereiche von int(3) und int(10) in MySQL gleich?

Sind die Wertebereiche von int(3) und int(10) in MySQL gleich?

Frage:

Haben die MySQL-Felder unsigned int(3) und unsigned int(6) den gleichen Wertebereich? Wenn unterschiedlich, wie groß sind sie?

Antwort:

Anders: int(3) kann bis zu 3 Ziffern vorzeichenloser Ganzzahlen anzeigen, und int(6) kann bis zu 6 Ziffern vorzeichenloser Ganzzahlen anzeigen.

Wenn Ihre Antwort die gleiche ist wie oben, herzlichen Glückwunsch, Sie haben den gleichen Fehler gemacht wie ich.

Wirklichkeit:

Ein Integer vom Typ int belegt 4 Bytes. Der Bereich eines vorzeichenbehafteten Integers ist: -2^31 ~ 2^31-1, und der Bereich eines vorzeichenlosen Integers ist: 0 ~ 2^32-1. Da es sich bei allen um vorzeichenlose Integer handelt, ist der Speicherbereich derselbe. int(6) füllt die Zahl einfach mit 0 auf, wenn sie weniger als 6 Ziffern hat. Wenn sie mehr als 6 Ziffern hat, ist kein Auffüllen erforderlich.

Wir erstellen folgende Tabelle:

Tabelle löschen, falls vorhanden, Test;
CREATE TABLE `test` (
  `id` int(11) NICHT NULL AUTO_INCREMENT,
  `a` int(11) NICHT NULL,
  `b` int(11) unsigned zerofill NICHT NULL,
  `c` int(5) DEFAULT NULL,
  `d` int(5) unsigned zerofill NICHT NULL,
  `e` int(15) DEFAULT NULL,
  PRIMÄRSCHLÜSSEL (`id`)
)ENGINE=InnoDB STANDARD-CHARSET=utf8mb4;

Nachdem Sie einige Daten eingegeben haben, verwenden Sie die cmd-Befehlszeile zum Anzeigen von:

mysql> wähle * aus Test;
+----+------------+----------+------------+------------+------------+
| Ich würde | a | b | c | d | e |
+----+------------+----------+------------+------------+------------+
| 1 | 1 | 00000000001 | 1 | 00001 | 1 |
| 2 | 1234567890 | 01234567890 | 1234567890 | 1234567890 | 1234567890 |
+----+------------+----------+------------+------------+------------+

Es wurde festgestellt, dass sowohl int(3) als auch int(6) ganze Zahlen mit mehr als 6 Ziffern anzeigen können. Wenn die Zahl jedoch weniger als 3 oder 6 Ziffern hat, wird sie am Anfang mit Nullen aufgefüllt.

Hinweis: Wenn Sie ein Tool wie Navicat zur Anzeige verwenden, wird 0 nicht hinzugefügt. Es kann sein, dass es verarbeitet wurde. Sie müssen die MySQL-Befehlszeile verwenden, um diesen Effekt zu sehen.

Schauen Sie im Handbuch nach, die Erklärung lautet:

MySQL unterstützt auch die Möglichkeit, die Anzeigebreite von Integer-Werten in Klammern hinter dem Typ-Schlüsselwort anzugeben (beispielsweise INT(4)). Diese optionale Anzeigebreite gibt an, dass die Anzeigebreite von links aus aufgefüllt werden soll, wenn sie kleiner als die angegebene Spaltenbreite ist. Die Anzeigebreite schränkt weder den Wertebereich ein, der in der Spalte enthalten sein kann, noch schränkt sie die Anzeige von Werten ein, die die angegebene Breite der Spalte überschreiten.

Mit anderen Worten, die Länge von int hat keinen Einfluss auf die Speichergenauigkeit der Daten. Die Länge bezieht sich nur auf die Anzeige. Um es klarer zu machen, haben wir im obigen Beispiel in der Anweisung zur Tabellenerstellung Zerofill verwendet.

Wissenspunkte

Das M in int (M) gibt die maximale Anzeigebreite an. Die maximal gültige Anzeigebreite beträgt 255, und die Anzeigebreite hat nichts mit der Speichergröße oder dem im Typ enthaltenen Wertebereich zu tun.

Lassen Sie uns zunächst über die numerischen Typen von MySQL sprechen. MySQL unterstützt alle standardmäßigen numerischen SQL-Datentypen. Zu diesen Typen gehören strenge numerische Datentypen (INTEGER, SMALLINT, DECIMAL und NUMERIC) und ungefähre numerische Datentypen (FLOAT, REAL und DOUBLE PRECISION). Das Schlüsselwort INT ist ein Synonym für INTEGER und das Schlüsselwort DEC ist ein Synonym für DECIMAL.

Der BIT-Datentyp speichert Bitfeldwerte und wird von MyISAM-, MEMORY-, InnoDB- und BDB-Tabellen unterstützt. Als Erweiterung des SQL-Standards unterstützt MySQL auch die Integer-Typen TINYINT, MEDIUMINT und BIGINT. In der folgenden Tabelle sind der für jeden Ganzzahltyp erforderliche Speicher und Bereich aufgeführt.

abschließend:

Unabhängig davon, ob es sich um unsigned int(3) oder unsigned int(6) handelt, wird eine 4 Byte große vorzeichenlose Ganzzahl gespeichert, also 0~2^32.

Zusammenfassen

Dies ist das Ende dieses Artikels darüber, ob der Wertebereich von int(3) und int(10) in MySQL derselbe ist. Weitere Informationen zum Wertebereich von mysql int(3) und int(10) finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Unterschied zwischen int(10) und int(11) in MySQL
  • Was bedeutet das n nach int(n) in MySQL?
  • Detaillierte Erklärung des Unterschieds zwischen MySQL int(3) und int(11)
  • Eine kurze Diskussion über den Unterschied zwischen int(1) und int(10) in MySQL

<<:  Zusammenfassung des fragmentierten Wissens zum Docker-Management

>>:  Detaillierte Erläuterung der CSS-Randüberlappung und Lösungssuche

Artikel empfehlen

Installation und Verwendung von MySQL unter Ubuntu (allgemeine Version)

Unabhängig von der verwendeten Ubuntu-Version ist...

So verwenden Sie den Linux-Befehl seq

1. Befehlseinführung Mit dem Befehl seq (Sequence...

Detaillierte Erläuterung der TCPdump-Befehlsbeispiele in Linux

Vorwort Einfach ausgedrückt ist tcpdump ein Paket...

Detaillierte Erläuterung der Kubernetes-Pod-Orchestrierung und des Lebenszyklus

Inhaltsverzeichnis K8S Master Grundlegende Archit...

Beschreibung des MySQL-Optimierungsparameters query_cache_limit

query_cache_limit query_cache_limit gibt die Puff...

Zusammenfassung des Wissens zu langsamen MySQL-Protokollen

Inhaltsverzeichnis 1. Einführung in Slow Log 2. L...

Warum wird mir die Zugriffsschnittstelle für Docker Tomcat nicht angezeigt?

Frage: Kann der Ursprungsserver keine Darstellung...