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:
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.
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