Comprensión de la transformación de columnas numéricas en MySQL
MySQL a menudo transforma números enteros largos en valores inesperados cuando se inserta en columnas más cortas. En lugar de truncarlo, MySQL ajusta el valor almacenado. Este comportamiento se atribuye al mecanismo de desbordamiento de enteros.
Por ejemplo, considere una columna denominada algún_número con una longitud de 10. Cuando se inserta un número que excede esta longitud (por ejemplo, 715988985123857), se transforma en 2147483647.
El desbordamiento Mecanismo
Según la documentación de MySQL, el desbordamiento de enteros ocurre cuando el resultado de un cálculo excede el valor máximo permitido para el tipo de datos. En este caso, el valor máximo para un entero de 10 bits es 2147483647.
Fórmula para el resultado calculado
La transformación sigue una fórmula específica:
Result = Number % (2^Bits) - 1
donde:
En nuestro ejemplo, Número es 715988985123857 y Bits es 10, lo que resulta en:
2147483647
BigInt vs. Int
Para evitar el desbordamiento de enteros, utilice un tipo de datos bigint para enteros más grandes. BigInt puede almacenar valores de hasta 2^63-1, lo que evita problemas de truncamiento o transformación.
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