Transformación de entero largo en una columna más corta: mecanismo y fórmula
Al insertar un entero largo en una columna de enteros más corta, MySQL normalmente trunca el valor para que quepa dentro de la longitud especificada. Sin embargo, en algunos casos, el comportamiento puede diferir, lo que resulta en una transformación inesperada.
Considere una columna de entero largo de 10 dígitos algún_número. Si se inserta en esta columna un valor que excede el rango entero máximo (2147483647), en lugar de truncarlo, MySQL establecerá el valor en 2147483647, el entero máximo permitido para ese tipo de datos.
El mecanismo detrás Transformación
La transformación se produce debido a un desbordamiento de enteros. Cuando el entero largo excede el rango disponible, MySQL lo interpreta automáticamente como un entero negativo y almacena la representación en complemento a dos. Este valor negativo, cuando se vuelve a convertir en un entero sin signo, da como resultado 2147483647.
Fórmula de transformación
El valor resultante se puede calcular usando la siguiente fórmula:
Resulting Integer = (Original Integer & 0x7FFFFFFF) 1
Para el ejemplo dado, con un entero original de 715988985123857:
Resulting Integer = (715988985123857 & 0x7FFFFFFF) 1 Resulting Integer = (2147483647) 1 Resulting Integer = 2147483647
Por lo tanto, la transformación de 715988985123857 a 2147483647 no es un truncamiento sino más bien un desbordamiento del entero máximo permitido para el tipo de datos especificado.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3