Tipo de dato INT de MySQL explicado: valor máximo, rango, tamaño de almacenamiento y cambios de deprecación (MySQL 8+)

1. Introducción

MySQL es un sistema de gestión de bases de datos relacional muy popular y ampliamente usado en numerosas aplicaciones web y sistemas de bases de datos. Entre sus tipos de datos, el tipo INT es uno de los más utilizados para manejar valores numéricos. Este artículo ofrece una explicación detallada del tipo INT de MySQL. En particular, exploraremos los valores máximos que admite el tipo INT y cómo usarlo de manera eficiente. Al leer este artículo, obtendrá los conocimientos necesarios para utilizar correctamente el tipo INT en MySQL.

2. Especificaciones básicas del tipo INT

Valores máximo y mínimo de INT

El tipo INT de MySQL utiliza 4 bytes (32 bits) de almacenamiento, y el rango de valores que puede almacenar es el siguiente:

  • Con signo (SIGNED) :
  • Valor mínimo: -2,147,483,648
  • Valor máximo: 2,147,483,647
  • Sin signo (UNSIGNED) :
  • Valor mínimo: 0
  • Valor máximo: 4,294,967,295

Tamaño de almacenamiento de INT

El tipo INT siempre ocupa 4 bytes de almacenamiento. Este tamaño permanece constante sin importar el valor almacenado. Por lo tanto, si no necesita manejar un rango numérico muy amplio, es más eficiente considerar tipos de datos más pequeños (por ejemplo, TINYINT o SMALLINT).

Casos de uso para INT

El tipo INT se emplea habitualmente en los siguientes escenarios:

  • Valores autoincrementales (p. ej., IDs de usuarios, números de orden)
  • Datos enteros usados en cálculos o procesamiento estadístico (p. ej., conteos de inventario, conteos de clics)
  • Datos representados dentro de un rango fijo (p. ej., edad o puntuaciones de exámenes)

En estos casos, es importante considerar el rango numérico requerido y la eficiencia de memoria.

3. ¿Qué significa M en INT(M)?

¿Qué es el ancho de visualización (M)?

En MySQL, la M en INT(M) representa el “ancho de visualización”. No afecta al valor numérico real almacenado en la base de datos; en su lugar, especifica cómo se formatea el valor al mostrarse. Por ejemplo, si se define como INT(5), el número se mostrará con un ancho de 5 dígitos.

Sin embargo, el ancho de visualización M solo tiene sentido en el siguiente caso:

  • Cuando la opción ZEROFILL está habilitada
  • Ejemplo: Con INT(5) ZEROFILL, si el valor es 123, se mostrará como 00123.

Notas importantes sobre ZEROFILL

Al usar la opción ZEROFILL, se aplican las siguientes características:

  1. Se añaden ceros a la izquierda de forma automática.
  2. El atributo UNSIGNED se aplica automáticamente.

Por lo tanto, si necesita almacenar valores negativos, no puede usar ZEROFILL.

Aclarando conceptos erróneos comunes

Muchos principiantes creen erróneamente que M limita el valor máximo almacenable. Sin embargo, M solo afecta al formato de visualización y no tiene ningún impacto en el rango real de almacenamiento.

4. Comparación con otros tipos de entero

Tipos de datos enteros y sus rangos

MySQL proporciona los siguientes tipos de entero:

Type NameBytesSigned RangeUnsigned Range
TINYINT1 byte-128 to 1270 to 255
SMALLINT2 bytes-32,768 to 32,7670 to 65,535
MEDIUMINT3 bytes-8,388,608 to 8,388,6070 to 16,777,215
INT4 bytes-2,147,483,648 to 2,147,483,6470 to 4,294,967,295
BIGINT8 bytes-9,223,372,036,854,775,808 to 9,223,372,036,854,775,8070 to 18,446,744,073,709,551,615

Criterios de selección

Utilice las siguientes directrices al elegir un tipo de dato adecuado en el diseño de bases de datos:

  • Si el rango es pequeño: use TINYINT o SMALLINT para ahorrar memoria.
  • Si se requiere un rango extremadamente amplio: use BIGINT.
  • Si se busca un uso de propósito general: INT suele ser la opción óptima.

5. Cambios desde MySQL 8.0.17

Deprecación del ancho de visualización (M)

A partir de MySQL 8.0.17, el “ancho de visualización (M)” para los tipos de entero ha sido deprecado. Este cambio se introdujo junto con la deprecación de la opción ZEROFILL y podría eliminarse en versiones futuras de MySQL.

Las razones para deprecar el ancho de visualización son las siguientes:

  1. Provocó malentendidos:
  • Muchos usuarios interpretaron que M afectaba al valor máximo almacenable o al número de dígitos.
  1. Uso práctico limitado:
  • Dado que M solo controlaba el formato de visualización, ahora ese formato se maneja comúnmente en la capa de aplicación, reduciendo su necesidad.

Deprecación de ZEROFILL

La opción ZEROFILL también quedó obsoleta en la misma versión. Aunque ZEROFILL era útil para rellenar números con ceros a la izquierda, ya no se recomienda por las siguientes razones:

  • Enfoques alternativos generalizados:
  • El relleno con ceros ahora puede manejarse fácilmente en la capa de aplicación o de la interfaz de usuario.
  • Evitar confusiones:
  • La aplicación automática del atributo UNSIGNED al usar ZEROFILL generaba confusión entre los usuarios principiantes.

Cómo adaptarse a la obsolescencia

En respuesta a estas deprecaciones, considere los siguientes enfoques en el diseño de bases de datos:

  1. Manejar el formato en la capa de aplicación:
  • Realice el relleno con ceros y el formateo en la capa de aplicación o de presentación.
  • Ejemplo: implemente el relleno con ceros usando PHP o JavaScript.
  1. Adoptar un diseño que no dependa del ancho de visualización:
  • Defina el tipo INT sin especificar M y concéntrese en la precisión de los datos en lugar del formato de visualización.

6. Sección práctica de preguntas frecuentes

Preguntas frecuentes

Q1. ¿Qué ocurre si almaceno un valor que supera el máximo del tipo INT?
A. En MySQL, intentar almacenar un valor fuera del rango del tipo INT producirá un error. Debe elegir un valor dentro del rango admitido o cambiar a un tipo de datos con un rango mayor (por ejemplo, BIGINT).

Q2. ¿Cuál es la diferencia entre INT y BIGINT?
A. El tipo BIGINT ocupa el doble de espacio que INT (8 bytes) y ofrece un rango numérico mucho más amplio. Por ejemplo, el rango con signo de BIGINT supera ±9 quintillones, lo que lo hace adecuado para manejar conjuntos de datos muy grandes.

Q3. Después de que ZEROFILL quedó obsoleto, ¿cómo debo implementar la visualización con ceros a la izquierda?
A. Se recomienda manejar el relleno con ceros en la capa de aplicación. Por ejemplo, en PHP puede usar la función str_pad(), y en JavaScript puede usar el método padStart() para implementar el relleno con ceros.

Q4. ¿Cómo debo elegir entre INT y otros tipos enteros?
A. Seleccione el tipo según el rango de datos. Los valores numéricos pequeños (por ejemplo, edad o puntuaciones) son adecuados para TINYINT, los datos de escala media (por ejemplo, IDs de usuarios) son adecuados para INT, y los valores muy grandes (por ejemplo, datos de transacciones financieras) son adecuados para BIGINT.

7. Conclusión

En este artículo proporcionamos una explicación detallada del tipo de datos INT de MySQL. Los puntos clave son los siguientes:

  • Comprender las diferencias entre los valores máximos y mínimos firmados y sin signo del tipo INT constituye la base de un diseño de datos adecuado.
  • Es importante entender los enfoques alternativos a las opciones obsoletas “ancho de visualización (M)” y “ZEROFILL” y diseñar bases de datos que puedan adaptarse a futuras actualizaciones de MySQL.
  • Seleccione el tipo entero apropiado según las características de los datos para construir una base de datos eficiente y mantenible.

Utilice este artículo como referencia para optimizar el uso del tipo INT y mejorar aún más la eficiencia en el diseño de bases de datos MySQL.