Maison  >  Article  >  base de données  >  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 ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-31 08:27:30764parcourir

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

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

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!

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