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 débordement Mécanisme
Selon la documentation MySQL, un dépassement 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 dans :
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.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3