Heim  >  Artikel  >  Datenbank  >  Warum wandelt sich ein großer ganzzahliger Wert in 2147483647 um, wenn er in eine MySQL-INT-Spalte eingefügt wird?

Warum wandelt sich ein großer ganzzahliger Wert in 2147483647 um, wenn er in eine MySQL-INT-Spalte eingefügt wird?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-01 09:57:02776Durchsuche

Why Does a Large Integer Value Transform into 2147483647 When Inserted into a MySQL INT Column?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn