"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi MySQL transforme-t-il les grands entiers insérés dans des colonnes plus courtes ?

Pourquoi MySQL transforme-t-il les grands entiers insérés dans des colonnes plus courtes ?

Publié le 2024-11-13
Parcourir:939

Why does MySQL transform large integers inserted into shorter columns?

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ù :

  • Le nombre est le numéro d'origine inséré
  • Bits est le nombre de bits dans la colonne de destination

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.

Dernier tutoriel Plus>

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