Heim > Datenbank > MySQL-Tutorial > 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
Freigeben: 2024-11-01 09:57:02
Original
863 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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
Nach dem Login kopieren

In diesem Fall:

result = 715988985123857 % 2147483647 = 2147483647
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage