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
Libérer: 2024-11-01 09:57:02
original
862 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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
Copier après la connexion

Dans ce cas :

result = 715988985123857 % 2147483647 = 2147483647
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal