Maison  >  Article  >  base de données  >  Comment MySQL gère-t-il les entiers longs dans des colonnes plus courtes : débordement ou troncature ?

Comment MySQL gère-t-il les entiers longs dans des colonnes plus courtes : débordement ou troncature ?

DDD
DDDoriginal
2024-10-27 20:08:02651parcourir

How Does MySQL Handle Long Integers in Shorter Columns: Overflow or Truncation?

Transformation d'un entier long dans une colonne plus courte : mécanisme et formule

Lors de l'insertion d'un entier long dans une colonne d'entiers plus courte, MySQL tronque généralement la valeur pour s'adapter à la longueur spécifiée. Cependant, dans certains cas, le comportement peut différer, entraînant une transformation inattendue.

Considérons une colonne entière de 10 chiffres some_number. Si une valeur dépassant la plage entière maximale (2147483647) est insérée dans cette colonne, au lieu d'être tronquée, MySQL définira la valeur sur 2147483647, l'entier maximum autorisé pour ce type de données.

Le mécanisme derrière Transformation

La transformation se produit en raison d'un débordement d'entier. Lorsque l'entier long dépasse la plage disponible, MySQL l'interprète automatiquement comme un entier négatif et stocke la représentation en complément à deux. Cette valeur négative, une fois reconvertie en un entier non signé, donne 2147483647.

Formule de transformation

La valeur résultante peut être calculée à l'aide de la formule suivante :

Resulting Integer = (Original Integer & 0x7FFFFFFF) + 1

Pour l'exemple donné, avec un entier original de 715988985123857 :

Resulting Integer = (715988985123857 & 0x7FFFFFFF) + 1
Resulting Integer = (2147483647) + 1
Resulting Integer = 2147483647

Par conséquent, la transformation de 715988985123857 en 2147483647 n'est pas une troncature mais plutôt un débordement vers l'entier maximum autorisé pour le type de données spécifié.

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