Vollständige Analyse des MySQL INT-Typs

Vollständige Analyse des MySQL INT-Typs

Vorwort:

Integer ist einer der am häufigsten verwendeten Feldtypen in MySQL und wird normalerweise zum Speichern von Ganzzahlen verwendet. Int ist der am häufigsten verwendete Ganzzahltyp. Verstehen Sie den Int-Typ wirklich? Dieser Artikel macht Sie mit den Kenntnissen des int-Typs vertraut und stellt Ihnen auch die Verwendung anderer ganzzahliger Felder vor.

1. Ganzzahlige Klassifizierung und Speicherbereich

Ganzzahltypen Byte Vorzeichenbereich Vorzeichenloser Bereich
TINYINT 1 -128 ~ 127 0 ~ 255
SMALLINT 2 -32768 ~ 32767 0 ~ 65535
MITTELINT 3 -8388608 ~ 8388607 0 ~ 16777215
INT/INTEGER 4 -2147483648 ~ 2147483647 0 ~ 4294967295
BIGINT 8 -9223372036854775808 ~ 9223372036854775807 0 ~ 18446744073709551615

Die Tabelle hat vier Spalten: Feldtyp, Anzahl der belegten Bytes, vorzeichenbehafteter Bereich und vorzeichenloser Bereich.
Nehmen wir als Beispiel den int-Typ:
Der int-Typ belegt 4 Bytes. Studenten, die sich mit Computerprinzipien beschäftigt haben, sollten wissen, dass Byte nicht die kleinste Einheit des Computerspeichers ist. Es gibt eine kleinere Einheit als Byte, nämlich Bit. Ein Bit stellt eine 0 oder 1 dar; 8 Bits bilden ein Byte; im Allgemeinen wird Byte durch ein großes B und Bit durch ein kleines b dargestellt.

Umrechnung von Computerspeichereinheiten: 1B=8b 1KB=1024B 1MB=1024KB

Basierend auf der Tatsache, dass der int-Typ 4 Bytes speichern darf, können wir dann berechnen, dass der Mindestwert, der im int UNSIGNED-Typ gespeichert werden kann, 0 und der Höchstwert 4294967295 ist (d. h. 4B = 32b, der Höchstwert besteht aus 32 1en, d. h. 4294967295 ist in Binärzahlen umgewandelt 32 1en).

2. Speicherreichweitentest

mysql> CREATE TABLE test_int ( -> col1 TINYINT, -> col2 SMALLINT, -> col3 MEDIUMINT, -> col4 INT, -> col5 BIGINT -> ) ENGINE = INNODB DEFAULT CHARSET = utf8; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)
mysql> show create table test_int\G**************************** 1. Zeile *************************** Tabelle: test_intTabelle erstellen: CREATE TABLE `test_int` ( `col1` tinyint(4) DEFAULT NULL, `col2` smallint(6) DEFAULT NULL, `col3` mediumint(9) DEFAULT NULL, `col4` int(11) DEFAULT NULL, `col5` bigint(20) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf81 Zeile im Set (0,00 Sek.)
mysql> insert into test_int values ​​​​(1234,123456,12345678,12345678901,12345678901234567890); Abfrage OK, 1 Zeile betroffen, 5 Warnungen (0,00 Sek.)
mysql> in test_int-Werte einfügen (-1234,-123456,-12345678,-12345678901,-12345678901234567890); Abfrage OK, 1 Zeile betroffen, 5 Warnungen (0,01 Sek.)
mysql> Warnungen anzeigen;+---------+------+----------------------------------------------+| Level | Code | Nachricht |+---------+------+-----------------------------------------------+| Warnung | 1264 | Wert für Spalte „col1“ in Zeile 1 außerhalb des Bereichs || Warnung | 1264 | Wert für Spalte „col2“ in Zeile 1 außerhalb des Bereichs || Warnung | 1264 | Wert für Spalte „col3“ in Zeile 1 außerhalb des Bereichs || Warnung | 1264 | Wert für Spalte „col4“ in Zeile 1 außerhalb des Bereichs || Warnung | 1264 | Wert für Spalte „col5“ in Zeile 1 |+---------+------+----------------------------------------------------------+5 Zeilen im Set (0,01 Sek.)
mysql> wähle * von test_int;+------+--------+----------+-------------+--------------+----------------------+| Spalte1 | Spalte2 | Spalte3 | Spalte4 | Spalte5 |+------+--------+----------+-------------+----------------------+| 127 | 32767 | 8388607 | 2147483647 | 9223372036854775807 || -128 | -32768 | -8388608 | -2147483648 | -9223372036854775808 |+------+--------+----------+-------------+----------------------+

Aus dem obigen Test können wir Folgendes erkennen: Wenn für verschiedene Ganzzahltypen ein maximaler Speicherbereich vorhanden ist und die Größe der gespeicherten Zahl nicht im Speicherbereich liegt, generiert MySQL einen Alarm, die Zahl kann jedoch eingefügt werden und der Standardwert wird auf den maximal oder minimal speicherbaren Wert gekürzt.

3. Die Bedeutung von M in int(M) und die Verwendung von Zerofill

Wir hören oft diesen Satz: Das M in int(M) steht für die maximale Anzeigebreite. Unsere erste Reaktion auf „maximale Anzeigebreite“ ist die maximale Breite des Wertes, den das Feld speichern kann. Wir denken, dass wir die Daten 10 nicht speichern können, wenn wir int(1) erstellen. Tatsächlich ist das nicht die Bedeutung.
Die Anzeigebreite einer Integer-Spalte hat nichts damit zu tun, wie viele Zeichen MySQL braucht, um den Wert der Spalte anzuzeigen, und hat auch nichts mit der Menge an Speicherplatz zu tun, die für den Integer erforderlich ist. Beispielsweise belegt int 4 Bytes und bigint 8 Bytes, unabhängig davon, auf wie viele Zeichen die Anzeigebreite eingestellt ist. Das heißt, der Speicherbereich von int(5) und int(10) ist derselbe.
Integer-Felder verfügen über ein ZEROFILL-Attribut (0-Padding), das den Anfang der Daten, die nicht lang genug sind, mit 0 auffüllt, um die festgelegte Länge zu erreichen. M verhält sich nach dem Hinzufügen von ZEROFILL anders. Bei Verwendung von ZEROFILL wird das vorzeichenlose Attribut standardmäßig automatisch hinzugefügt. Wenn Sie beispielsweise INT(3) ZEROFILL verwenden und 10 in die Datenbank einfügen, ist der tatsächlich eingefügte Wert 010, was bedeutet, dass eine 0 vorangestellt wird. Lassen Sie uns das testen:

mysql> CREATE TABLE test_int_zerofill ( -> col1 INT(5) ZEROFILL, -> col2 INT ZEROFILL, -> col3 INT(5) -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)
mysql> show create table test_int_zerofill\G**************************** 1. Zeile *************************** Tabelle: test_int_zerofillTabelle erstellen: CREATE TABLE `test_int_zerofill` ( `col1` int(5) unsigned zerofill DEFAULT NULL, `col2` int(10) unsigned zerofill DEFAULT NULL, `col3` int(5) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf81 Zeile im Set (0,00 Sek.)
mysql> insert into test_int_zerofill values ​​​​(12,12,12); Abfrage OK, 1 Zeile betroffen (0,00 Sek.)
mysql> select * from test_int_zerofill;+-------+------------+------+| col1 | col2 | col3 |+-------+------------+------+| 00012 | 000000012 | 12 |+-------+------------+------+1 Zeile im Set (0,00 Sek.)

Einige Schüler fragen sich vielleicht, was die Anwendungsszenarien von Zerofill sind. Am häufigsten sollte vor dem Monat oder Datum eine 0 hinzugefügt werden, damit die Anzeige standardisierter wird

CREATE TABLE `t_zerofill` ( `Jahr` Jahr(4) DEFAULT NULL, `Monat` int(2) unsigned zerofill DEFAULT NULL, `Tag` int(2) unsigned zerofill DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> in t_zerofill-Werte einfügen (2019,6,5); Abfrage OK, 1 Zeile betroffen (0,01 Sek.)
mysql> in t_zerofill-Werte einfügen (2019,6,18); Abfrage OK, 1 Zeile betroffen (0,00 Sek.)
mysql> in t_zerofill-Werte einfügen (2019,10,1); Abfrage OK, 1 Zeile betroffen (0,00 Sek.)
mysql> in t_zerofill-Werte einfügen (2019,11,11); Abfrage OK, 1 Zeile betroffen (0,01 Sek.)
mysql> select * from t_zerofill;+------+-------+------+| Jahr | Monat | Tag |+------+-------+------+| 2019 | 06 | 05 || 2019 | 06 | 18 || 2019 | 10 | 01 || 2019 | 11 | 11 |+------+-------+------+4 Zeilen im Set (0,00 Sek.)

4. Typauswahl

Nach der obigen Einführung wird die Auswahl verschiedener ganzzahliger Felder viel einfacher. Im Einklang mit dem Prinzip der Speicherminimierung sollte natürlich TINYINT gegenüber SMALLINT und MEDIUMINT gegenüber INT bevorzugt werden. Allerdings sollte alles unter der Prämisse der geschäftlichen Zufriedenheit erfolgen und der Typ, der weniger Bytes belegt, sollte so weit wie möglich gewählt werden. Für Felder, die nur positive Ganzzahlen speichern sollen, können Sie das unsigned-Attribut hinzufügen, das den Speicherbereich erweitert. Wenn das Feld beispielsweise das AUTO_INCREMENT-Attribut hat, können wir dem int-Typ das unsigned-Attribut hinzufügen.

Oben finden Sie den detaillierten Inhalt der vollständigen Analyse des MySQL INT-Typs. Weitere Informationen zum MySQL INT-Typ finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung der Bedeutung von M im MySQL-Datentyp int(M)
  • So konvertieren Sie den Typ varchar in der MySQL-Datenbank in den Typ int
  • Beispiel für die Änderung des Auto-Increment-Primärschlüsseltyps von int zu char in MySQL
  • Erklärung zur Verwendung von „Ersetzen“ und „Ersetzen in“ in MySQL
  • Ausführliche Erklärung des Maximalwerts von int in MySQL
  • MySQL fügt einen Fremdschlüsselfehler hinzu: 1215 Die Fremdschlüsseleinschränkungslösung kann nicht hinzugefügt werden
  • So konvertieren Sie den MySQL-Datumstyp und den Int-Typ
  • Langsame Abfrage durch Konvertierung von int in varchar in MySQL-Datenbank

<<:  Untersuchung der drei zugrunde liegenden Mechanismen der globalen Statusverwaltung von React

>>:  Implementierung der Installation und Deinstallation von CUDA und CUDNN in Ubuntu

Artikel empfehlen

Eine kurze Analyse von MySQL - MVCC

Versionskette In den Tabellen der InnoDB-Engine g...

HTML-Formular-Tag-Tutorial (5): Textfeld-Tag

<br />Mit diesem Tag können Sie ein mehrzeil...

MySql8 WITH RECURSIVE rekursive Abfrage Eltern-Kind-Sammlungsmethode

Hintergrund Wenn Sie eine Funktion entwickeln, di...

So erstellen Sie Ihre eigene Angular-Komponentenbibliothek mit DevUI

Inhaltsverzeichnis Vorwort Erstellen einer Kompon...

Ubuntu 19.10 aktiviert SSH-Dienst (detaillierter Prozess)

Ich habe mehr als eine Stunde gebraucht, um SSH i...

Konfigurationsmethode für die VMware Kali-Umgebung virtueller Maschinen

1|0 Kompilieren Sie den Kernel (1) Führen Sie den...

Vue – Erste Schritte mit der Wettervorhersage

In diesem Artikelbeispiel wird der spezifische Co...

19 MySQL-Optimierungsmethoden im Datenbankmanagement

Nach der MySQL-Datenbankoptimierung kann nicht nu...

Detaillierte Erläuterung der langsamen MySQL-Protokollabfrage

Langsame Protokollabfragefunktion Die Hauptfunkti...