"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué MySQL transforma enteros grandes insertados en columnas más cortas?

¿Por qué MySQL transforma enteros grandes insertados en columnas más cortas?

Publicado el 2024-11-13
Navegar:653

Why does MySQL transform large integers inserted into shorter columns?

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:

  • Número es el número original que se inserta
  • Bits es el número de bits en la columna de destino

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.

Último tutorial Más>

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