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é.
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