MySQL INT-Datentyp erklärt: Maximalwert, Wertebereich, Speichergröße & Änderungen bei Veraltung (MySQL 8+)

1. Einführung

MySQL ist ein beliebtes relationales Datenbankmanagementsystem, das in vielen Web‑Anwendungen und Datenbanksystemen weit verbreitet ist. Unter seinen Datentypen ist der INT‑Typ einer der am häufigsten verwendeten für die Verarbeitung numerischer Werte. Dieser Artikel liefert eine ausführliche Erklärung des MySQL‑INT‑Typs. Insbesondere werden wir die maximalen Werte untersuchen, die der INT‑Typ unterstützt, und wie man ihn effizient nutzt. Durch das Lesen dieses Artikels erhalten Sie das nötige Wissen, um den INT‑Typ in MySQL korrekt zu verwenden.

2. Grundlegende Spezifikationen des INT‑Typs

Maximal- und Minimalwerte von INT

Der MySQL‑INT‑Typ verwendet 4 Byte (32 Bit) Speicher, und der Wertebereich, den er speichern kann, ist wie folgt:

  • Signed (SIGNED) :
  • Minimalwert: -2,147,483,648
  • Maximalwert: 2,147,483,647
  • Unsigned (UNSIGNED) :
  • Minimalwert: 0
  • Maximalwert: 4,294,967,295

Speichergröße von INT

Der INT‑Typ verwendet immer 4 Byte Speicher. Diese Größe bleibt konstant, unabhängig vom gespeicherten Wert. Daher ist es effizienter, kleinere Datentypen zu verwenden, wenn Sie keinen sehr großen Zahlenbereich benötigen (z. B. TINYINT oder SMALLINT).

Anwendungsfälle für INT

Der INT‑Typ wird in den folgenden Szenarien häufig eingesetzt:

  • Auto‑Increment‑Werte (z. B. Benutzer‑IDs, Bestellnummern)
  • Ganzzahlige Daten, die in Berechnungen oder statistischen Auswertungen verwendet werden (z. B. Lagerbestände, Klickzahlen)
  • Daten, die innerhalb eines festen Bereichs liegen (z. B. Alter oder Testergebnisse)

In diesen Anwendungsfällen ist es wichtig, den erforderlichen Zahlenbereich und die Speichereffizienz zu berücksichtigen.

3. Was bedeutet M bei INT(M)?

Was ist die Anzeige­breite (M)?

In MySQL steht das M in INT(M) für die „Anzeige­breite“. Es beeinflusst nicht den tatsächlich gespeicherten numerischen Wert in der Datenbank, sondern legt fest, wie der Wert bei der Anzeige formatiert wird. Beispiel: Wenn INT(5) definiert ist, wird die Zahl mit einer Breite von 5 Stellen angezeigt.

Allerdings hat die Anzeige­breite M nur in folgendem Fall Bedeutung:

  • Wenn die ZEROFILL‑Option aktiviert ist
  • Beispiel: Bei INT(5) ZEROFILL wird der Wert 123 als 00123 angezeigt.

Wichtige Hinweise zu ZEROFILL

Bei Verwendung der ZEROFILL‑Option gelten folgende Eigenschaften:

  1. Führende Nullen werden automatisch links hinzugefügt.
  2. Das Attribut UNSIGNED wird automatisch angewendet.

Daher können Sie ZEROFILL nicht verwenden, wenn Sie negative Werte speichern müssen.

Aufklärung häufiger Missverständnisse

Viele Anfänger glauben fälschlich, dass M den maximal speicherbaren Wert begrenzt. M beeinflusst jedoch nur die Anzeige­formatierung und hat keinerlei Einfluss auf den tatsächlichen Speicherbereich.

4. Vergleich mit anderen Ganzzahltypen

Arten von Ganzzahl‑Datentypen und ihre Bereiche

MySQL stellt die folgenden Ganzzahl‑Typen bereit:

Type NameBytesSigned RangeUnsigned Range
TINYINT1 byte-128 to 1270 to 255
SMALLINT2 bytes-32,768 to 32,7670 to 65,535
MEDIUMINT3 bytes-8,388,608 to 8,388,6070 to 16,777,215
INT4 bytes-2,147,483,648 to 2,147,483,6470 to 4,294,967,295
BIGINT8 bytes-9,223,372,036,854,775,808 to 9,223,372,036,854,775,8070 to 18,446,744,073,709,551,615

Auswahlkriterien

Verwenden Sie die folgenden Richtlinien bei der Auswahl eines geeigneten Datentyps im Datenbankdesign:

  • Wenn der Bereich klein ist: Verwenden Sie TINYINT oder SMALLINT, um Speicher zu sparen.
  • Wenn ein extrem großer Bereich benötigt wird: Verwenden Sie BIGINT.
  • Wenn ein allgemeiner Einsatz gewünscht ist: INT ist in der Regel optimal.

5. Änderungen seit MySQL 8.0.17

Abschaffung der Anzeige­breite (M)

Ab MySQL 8.0.17 ist die „Anzeige­breite (M)“ für Ganzzahl‑Typen veraltet. Diese Änderung wurde zusammen mit der Abschaffung der ZEROFILL‑Option eingeführt und kann in zukünftigen MySQL‑Versionen entfernt werden.

Die Gründe für die Abschaffung der Anzeige­breite sind folgende:

  1. Verursachte Missverständnisse: * Viele Benutzer dachten fälschlich, dass M den maximal speicherbaren Wert oder die Anzahl der Ziffern beeinflusst.
  2. Begrenzte praktische Nutzung: * Da M nur die Anzeige­formatierung steuerte, wird die Formatierung heute meist auf Anwendungsebene erledigt, wodurch die Notwendigkeit sinkt.

Abschaffung von ZEROFILL

Die Option ZEROFILL wurde ebenfalls in derselben Version als veraltet markiert. Obwohl ZEROFILL bequem war, um Zahlen mit führenden Nullen aufzufüllen, wird sie aus den folgenden Gründen nicht mehr empfohlen:

  • Weit verbreitete alternative Ansätze:
  • Das Auffüllen mit Nullen kann jetzt einfach in der Anwendungsschicht oder UI-Schicht gehandhabt werden.
  • Vermeidung von Verwirrung:
  • Die automatische Anwendung des UNSIGNED-Attributs bei der Verwendung von ZEROFILL hat Anfängerbenutzer verwirrt.

Anpassung an die Abschaffung

Auf diese Abschaffungen hin sollten Sie in der Datenbankgestaltung folgende Ansätze in Betracht ziehen:

  1. Formatierung in der Anwendungsschicht handhaben:
  • Führen Sie das Auffüllen mit Nullen und die Formatierung in der Anwendungsschicht oder Präsentationsschicht durch.
  • Beispiel: Implementieren Sie das Auffüllen mit Nullen mit PHP oder JavaScript.
  1. Ein Design übernehmen, das nicht auf die Anzeigebreite angewiesen ist:
  • Definieren Sie den INT-Typ ohne Angabe von M und konzentrieren Sie sich auf die Daten Genauigkeit statt auf die Anzeigeformatierung.

6. Praktische FAQ-Sektion

Häufig gestellte Fragen

Q1. Was passiert, wenn ich einen Wert speichere, der das Maximum des INT-Typs überschreitet?
A. In MySQL führt der Versuch, einen Wert außerhalb des Bereichs des INT-Typs zu speichern, zu einem Fehler. Sie müssen entweder einen Wert innerhalb des unterstützten Bereichs wählen oder zu einem Datentyp mit einem größeren Bereich wechseln (z. B. BIGINT).

Q2. Was ist der Unterschied zwischen INT und BIGINT?
A. Der BIGINT-Typ verwendet doppelt so viel Speicher wie INT (8 Bytes) und bietet einen viel breiteren numerischen Bereich. Zum Beispiel überschreitet der signierte Bereich von BIGINT ±9 Quintillionen, was ihn geeignet für die Handhabung sehr großer Datensätze macht.

Q3. Nach der Abschaffung von ZEROFILL, wie sollte ich eine mit Nullen aufgefüllte Anzeige implementieren?
A. Es wird empfohlen, das Auffüllen mit Nullen in der Anwendungsschicht zu handhaben. Zum Beispiel können Sie in PHP die Funktion str_pad() verwenden und in JavaScript die Methode padStart(), um das Auffüllen mit Nullen zu implementieren.

Q4. Wie sollte ich zwischen INT und anderen Ganzzahltypen wählen?
A. Wählen Sie den Typ basierend auf dem Datenbereich. Kleine numerische Werte (z. B. Alter oder Punkte) eignen sich für TINYINT, Daten mit mittlerer Skala (z. B. Benutzer-IDs) eignen sich für INT und sehr große Werte (z. B. Finanztransaktionsdaten) eignen sich für BIGINT.

7. Schlussfolgerung

In diesem Artikel haben wir eine detaillierte Erklärung des MySQL INT-Datentyps gegeben. Die wichtigsten Punkte sind wie folgt:

  • Das Verständnis der Unterschiede zwischen signierten und unsignierten Maximal- und Minimalwerten des INT-Typs bildet die Grundlage für ein richtiges Daten-Design.
  • Es ist wichtig, alternative Ansätze zu den als veraltet markierten Optionen „Anzeigebreite (M)“ und „ZEROFILL“ zu verstehen und Datenbanken zu entwerfen, die sich an zukünftige MySQL-Updates anpassen können.
  • Wählen Sie den geeigneten Ganzzahltyp basierend auf den Datenmerkmalen, um eine effiziente und wartbare Datenbank zu erstellen.

Verwenden Sie diesen Artikel als Referenz, um die Nutzung des INT-Typs zu optimieren und die Effizienz in der MySQL-Datenbankgestaltung weiter zu verbessern.