„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum transformiert MySQL große Ganzzahlen, die in kürzere Spalten eingefügt werden?

Warum transformiert MySQL große Ganzzahlen, die in kürzere Spalten eingefügt werden?

Veröffentlicht am 13.11.2024
Durchsuche:465

Why does MySQL transform large integers inserted into shorter columns?

Numerische Spaltentransformation in MySQL verstehen

MySQL wandelt lange Ganzzahlen häufig in unerwartete Werte um, wenn sie in kürzere Spalten eingefügt werden. Anstatt ihn abzuschneiden, passt MySQL den gespeicherten Wert an. Dieses Verhalten wird auf den Integer-Überlaufmechanismus zurückgeführt.

Betrachten Sie beispielsweise eine Spalte mit dem Namen some_number und einer Länge von 10. Wenn eine Zahl eingefügt wird, die diese Länge überschreitet (z. B. 715988985123857), wird sie in 2147483647 umgewandelt.

Der Überlaufmechanismus

Laut der MySQL-Dokumentation tritt ein Ganzzahlüberlauf auf, wenn das Ergebnis einer Berechnung den maximal zulässigen Wert für den Datentyp überschreitet. In diesem Fall beträgt der Maximalwert für eine 10-Bit-Ganzzahl 2147483647.

Formel für berechnetes Ergebnis

Die Transformation folgt einer bestimmten Formel:

Result = Number % (2^Bits) - 1

wobei:

  • Zahl ist die ursprünglich eingefügte Zahl
  • Bits ist die Anzahl der Bits in Zielspalte

In unserem Beispiel ist Number 715988985123857 und Bits ist 10, was zu:

2147483647

BigInt vs. Int

Um einen Ganzzahlüberlauf zu vermeiden, verwenden Sie einen Bigint-Datentyp für größere Ganzzahlen. BigInt kann Werte bis zu 2^63-1 speichern und verhindert so Kürzungs- oder Transformationsprobleme.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3