Numerische Spaltentransformation in MySQL verstehen
MySQL wandelt lange Ganzzahlen häufig in unerwartete Werte um, wenn sie in kürzere Spalten eingefügt werden. Statt zu kürzen, passt MySQL den gespeicherten Wert an. Dieses Verhalten wird dem Integer-Überlaufmechanismus zugeschrieben.
Betrachten Sie beispielsweise eine Spalte namens „some_number“ mit 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 , Zahl ist 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.
Das obige ist der detaillierte Inhalt vonWarum transformiert MySQL große Ganzzahlen, die in kürzere Spalten eingefügt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!