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!