Maison >base de données >tutoriel mysql >Pourquoi une grande valeur entière se transforme-t-elle en 2147483647 lorsqu'elle est insérée dans une colonne MySQL INT ?

Pourquoi une grande valeur entière se transforme-t-elle en 2147483647 lorsqu'elle est insérée dans une colonne MySQL INT ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-01 09:57:02871parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn