Comprendre la transformation des colonnes numériques dans MySQL
MySQL transforme souvent des entiers longs en valeurs inattendues lorsqu'ils sont insérés dans des colonnes plus courtes. Au lieu de tronquer, MySQL ajuste la valeur stockée. Ce comportement est attribué au mécanisme de dépassement d'entier.
Par exemple, considérons une colonne nommée some_number d'une longueur de 10. Lorsqu'un nombre dépassant cette longueur (par exemple, 715988985123857) est inséré, il est transformé en 2147483647.
Le mécanisme de débordement
Selon la documentation MySQL, un débordement d'entier se produit lorsque le résultat d'un calcul dépasse la valeur maximale autorisée pour le type de données. Dans ce cas, la valeur maximale pour un entier de 10 bits est 2147483647.
Formule du résultat calculé
La transformation suit une formule spécifique :
Result = Number % (2^Bits) - 1
où :
Dans notre exemple , le nombre est 715988985123857 et les bits sont 10, ce qui donne :
2147483647
BigInt vs. Int
Pour éviter un débordement d'entier, utilisez un type de données bigint pour les entiers plus grands . BigInt peut stocker des valeurs jusqu'à 2 ^ 63-1, évitant ainsi les problèmes de troncature ou de transformation.
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!