"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 > ¿Cómo maneja MySQL los enteros largos en columnas más cortas: desbordamiento o truncamiento?

¿Cómo maneja MySQL los enteros largos en columnas más cortas: desbordamiento o truncamiento?

Publicado el 2024-11-08
Navegar:991

How Does MySQL Handle Long Integers in Shorter Columns: Overflow or Truncation?

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.

Ú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