Comprendre l'écart de troncature d'entiers
Considérez une situation dans laquelle vous avez une colonne entière d'une longueur de 10, comme suit :
<code class="sql">`some_number` int(10) unsigned NOT NULL</code>
Lors de l'insertion d'une valeur supérieure à la plage autorisée de la colonne :
<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>
Vous pouvez vous attendre à ce qu'une troncature se produise, ce qui entraîne une valeur plus courte. Cependant, étonnamment, la valeur dans le tableau se transforme en 2147483647.
Mécanisme derrière la transformation
Selon la documentation MySQL, un dépassement d'entier pour les types int et integer entraînera le nombre maximum autorisé, qui dans ce cas est 2147483647. Ce comportement n'est pas une troncature mais plutôt une opération modulo, qui prend le reste de la valeur d'origine divisée par le nombre maximum autorisé.
Formule de calcul
Pour calculer le résultat d'un débordement d'entier, utilisez la formule suivante :
result = original_value % maximum_allowed_value
Dans ce cas :
result = 715988985123857 % 2147483647 = 2147483647
Par conséquent, la grande valeur de 715988985123857 devient 2147483647 dans la base de données en raison d'un débordement d'entier et de l'opération modulo.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!