"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 > 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 ?

Publié le 2024-11-08
Parcourir:209

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érez 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 d'origine 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é.

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