Grundlegendes zur Diskrepanz bei der Ganzzahlkürzung
Stellen Sie sich eine Situation vor, in der Sie eine Ganzzahlspalte mit einer Länge von 10 haben, wie folgt:
<code class="sql">`some_number` int(10) unsigned NOT NULL</code>
Beim Einfügen eines Werts, der größer als der zulässige Bereich der Spalte ist:
<code class="php">$some_number = 715988985123857; $query = "INSERT INTO this_table SET some_number = ?"; $stmt = $mysqli->prepare($query); $stmt->bind_param('i', $some_number); $stmt->execute();</code>
Sie können davon ausgehen, dass es zu einer Kürzung kommt, was zu einem kürzeren Wert führt. Überraschenderweise verwandelt sich der Wert in der Tabelle jedoch in 2147483647.
Mechanismus hinter der Transformation
Laut MySQL-Dokumentation führt ein Ganzzahlüberlauf für die Typen int und integer dazu die maximal zulässige Zahl, die in diesem Fall 2147483647 ist. Bei diesem Verhalten handelt es sich nicht um eine Kürzung, sondern um eine Modulo-Operation, bei der der Rest des ursprünglichen Werts durch die maximal zulässige Zahl geteilt wird.
Berechnungsformel
Um das Ergebnis eines Ganzzahlüberlaufs zu berechnen, verwenden Sie die folgende Formel:
result = original_value % maximum_allowed_value
In diesem Fall:
result = 715988985123857 % 2147483647 = 2147483647
Daher ist der große Wert von 715988985123857 wird in der Datenbank aufgrund eines Ganzzahlüberlaufs und der Modulo-Operation zu 2147483647.
Das obige ist der detaillierte Inhalt vonWarum wandelt sich ein großer ganzzahliger Wert in 2147483647 um, wenn er in eine MySQL-INT-Spalte eingefügt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!