Valor máximo del INT en MySQL y uso óptimo: con y sin signo

1. Introducción

MySQL es un sistema de gestión de bases de datos relacional popular que se utiliza en muchas aplicaciones web y sistemas de bases de datos. Dentro de él, el tipo «INT» es uno de los tipos de datos más usados al manejar números. En este artículo se explica en detalle el tipo INT de MySQL. En particular, se profundiza en el valor máximo que puede tener el tipo INT y en métodos eficientes de uso. Al leer este artículo, obtendrá el conocimiento necesario para manejar adecuadamente el tipo INT en MySQL.

2. Especificación básica del tipo INT

Valor máximo y mínimo del tipo INT

El tipo INT de MySQL utiliza un almacenamiento de 4 bytes (32 bits) 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

Capacidad de almacenamiento del tipo INT

El tipo INT utiliza un almacenamiento fijo de 4 bytes. Esto es constante sin importar el tamaño del valor almacenado. Por lo tanto, si no es necesario manejar un rango muy amplio, es eficiente considerar tipos de datos de menor tamaño (por ejemplo, TINYINT o SMALLINT).

Casos de uso del tipo INT

El tipo INT se utiliza frecuentemente en los siguientes escenarios:
  • Valores autoincrementales (por ejemplo, ID de usuario, número de pedido)
  • Datos enteros para cálculos o procesamiento estadístico (por ejemplo, cantidad de inventario, número de clics)
  • Representación de datos dentro de un rango fijo (por ejemplo, edad o puntuación)
En estos casos de uso, es importante considerar el rango necesario y la eficiencia de memoria.

3. Lo que significa la M en INT(M)

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

En MySQL, la INT(M), el M representa el “ancho de visualización”. Esto no afecta al valor numérico almacenado en la base de datos, sino que especifica cómo formatear el número al mostrarse. Por ejemplo, si se define INT(5), el número se mostrará con 5 dígitos. Sin embargo, el ancho de visualización M solo tiene sentido en los siguientes casos:
  • Opción ZEROFILL está habilitada
  • Ejemplo: en INT(5) ZEROFILL, si el valor es 123, la visualización será 00123.

Consideraciones sobre ZEROFILL

Al usar la opción ZEROFILL, se presentan las siguientes características:
  1. Se rellenan ceros a la izquierda.
  2. Se asigna automáticamente el atributo UNSIGNED.
Por lo tanto, si se desea manejar valores negativos, no se puede usar ZEROFILL.

Despejando malentendidos

Muchos principiantes creen erróneamente que M limita el valor máximo que se puede almacenar, pero M solo afecta el formato de visualización y no tiene relación alguna con el rango de valores que pueden almacenarse.

4. Comparación con otros tipos enteros

Tipos de enteros y sus rangos

En MySQL, se disponen de los siguientes tipos de enteros:
TipoBytesRango con signoRango sin signo
TINYINT1 byte-128 ~ 1270 ~ 255
SMALLINT2 bytes-32,768 ~ 32,7670 ~ 65,535
MEDIUMINT3 bytes-8,388,608 ~ 8,388,6070 ~ 16,777,215
INT4 bytes-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295
BIGINT8 bytes-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,8070 ~ 18,446,744,073,709,551,615

Criterios de selección

A continuación se presentan los criterios para elegir el tipo adecuado al diseñar una base de datos:
  • Cuando el rango es pequeño: ahorre memoria con TINYINT o SMALLINT.
  • Cuando se necesita un rango muy grande: use BIGINT.
  • Cuando se busca versatilidad: INT es la mejor opción.

5. Cambios a partir de MySQL 8.0.17

Desuso de la especificación de ancho de visualización (M)

A partir de MySQL 8.0.17, la “especificación de ancho de visualización (M)” para tipos enteros ha sido desaprobada. Este cambio se introdujo junto con la desaprobación de la opción ZEROFILL, y podría ser eliminado en versiones futuras de MySQL. A partir de MySQL 8.0.17, la “especificación de ancho de visualización (M)” para tipos enteros ha sido desaprobada. Este cambio se introdujo junto con la desaprobación de la opción ZEROFILL, y podría ser eliminado en versiones futuras de MySQL. Las razones por las que la especificación de ancho de visualización fue desaprobada son las siguientes: Las razones por las que la especificación de ancho de visualización fue desaprobada son las siguientes:
  1. Generación de malentendidos:
  • Muchos usuarios creían que “M” influía en el valor máximo o en la cantidad de dígitos que se podían almacenar.
  1. Uso práctico limitado:
  • El “M”, que solo tenía la función de formato de visualización, se volvió innecesario ya que normalmente el formateo se realiza en la capa de la aplicación.

Desuso de ZEROFILL

La opción “ZEROFILL” también fue desaprobada en la misma versión. ZEROFILL era una función útil para rellenar con ceros el ancho de visualización, pero ya no se recomienda por las siguientes razones: La opción “ZEROFILL” también fue desaprobada en la misma versión. ZEROFILL era una función útil para rellenar con ceros el ancho de visualización, pero ya no se recomienda por las siguientes razones:
  • Difusión de métodos alternativos:
  • Se han popularizado los métodos para lograr el relleno con ceros en la capa de aplicación o UI.
  • Evitar confusión:
  • El hecho de que al usar ZEROFILL se aplique automáticamente UNSIGNED generaba confusión entre los usuarios principiantes.

Medidas frente al desuso

Con el desuso, es necesario considerar las siguientes acciones en el diseño de bases de datos: Con el desuso, es necesario considerar las siguientes acciones en el diseño de bases de datos:
  1. Realizar el formateo en la aplicación:
  • Realizar el relleno con ceros y el formateo de los números en la capa de aplicación o de presentación.
  • Ejemplo: implementar el relleno con ceros en PHP o JavaScript.
  1. Adoptar un diseño que no requiera ancho de visualización:
  • En la definición del tipo INT no se especifica M, enfocándose en la precisión de los datos en sí.

6. Sección de preguntas frecuentes práctica

Preguntas frecuentes y respuestas

Q1. ¿Qué ocurre si se almacena un valor que supera el máximo del tipo INT? A. En MySQL, si se intenta almacenar un valor que excede el rango del tipo INT, se producirá un error. Es necesario elegir un valor dentro del rango o cambiar a un tipo de datos con un rango mayor (por ejemplo, BIGINT). Q2. ¿Cuál es la diferencia entre los tipos INT y BIGINT? A. El tipo BIGINT utiliza el doble de almacenamiento que el tipo INT (8 bytes) y su rango de valores es mucho más amplio. Por ejemplo, el rango con signo del tipo BIGINT supera los ±9×10^16, lo que lo hace adecuado para manejar datos a gran escala. Q3. Después de que ZEROFILL quedó obsoleto, ¿cómo se puede lograr la visualización con ceros a la izquierda? A. Se recomienda realizar el relleno con ceros en la capa de aplicación. Por ejemplo, en PHP se puede usar la función str_pad() y en JavaScript el método padStart() para lograr el relleno con ceros. Q4. ¿Cómo elegir entre el tipo INT y otros tipos de enteros? A. Se elige el tipo según el rango de los datos. Los valores pequeños (p. ej., edad o puntuaciones) pueden usar TINYINT, los datos de tamaño medio (p. ej., ID de usuario) INT, y los valores muy grandes (p. ej., datos de transacciones financieras) BIGINT.

7. Resumen

En este artículo, se explicó en detalle el tipo INT de MySQL. A continuación, los puntos importantes son:
  • Comprender la diferencia entre los valores máximo y mínimo de INT con y sin signo es la base para un diseño de datos adecuado.
  • Es importante conocer los métodos alternativos a la ahora obsoleta “anchura de visualización (M)” y “ZEROFILL”, y esforzarse por un diseño de base de datos que pueda adaptarse a futuras actualizaciones.
  • Seleccione el tipo entero adecuado según las características de los datos y construya una base de datos eficiente y fácil de mantener.
Utilice este artículo como referencia para optimizar el uso del tipo INT y hacer aún más eficiente el diseño de bases de datos en MySQL.