Solución:
Ocupan diferentes cantidades de espacio y tienen diferentes rangos de valores aceptables.
Aquí están los tamaños y rangos de valores para SQL Server, otros RDBMS tienen documentación similar:
- MySQL
- Postgres
- Oracle (solo tienen un
NUMBER
tipo de datos realmente) - DB2
Resulta que todos usan la misma especificación (con algunas excepciones menores que se indican a continuación) pero admiten varias combinaciones de esos tipos (Oracle no se incluye porque solo tiene un NUMBER
tipo de datos, consulte el enlace anterior):
| SQL Server MySQL Postgres DB2
---------------------------------------------------
tinyint | X X
smallint | X X X X
mediumint | X
int/integer | X X X X
bigint | X X X X
Y admiten los mismos rangos de valores (con una excepción a continuación) y todos tienen los mismos requisitos de almacenamiento:
| Bytes Range (signed) Range (unsigned)
--------------------------------------------------------------------------------------------
tinyint | 1 byte -128 to 127 0 to 255
smallint | 2 bytes -32768 to 32767 0 to 65535
mediumint | 3 bytes -8388608 to 8388607 0 to 16777215
int/integer | 4 bytes -2147483648 to 2147483647 0 to 4294967295
bigint | 8 bytes -9223372036854775808 to 9223372036854775807 0 to 18446744073709551615
Los tipos “sin firmar” solo están disponibles en MySQL, y el resto solo usa los rangos firmados, con una excepción notable: tinyint
en SQL Server no está firmado y tiene un rango de valores de 0 a 255
los tamaño de almacenamiento requerido y cuan grande los números pueden ser.
En SQL Server:
-
tinyint
1 byte, 0 a 255 -
smallint
2 bytes, -215 (-32,768) a 215-1 (32,767) -
int
4 bytes, -231 (-2,147,483,648) a 231-1 (2,147,483,647) -
bigint
8 bytes, -263 (-9,223,372,036,854,775,808) a 263-1 (9.223.372.036.854.775.807)
Puede almacenar el número 1 en los 4, pero un bigint
utilizará 8 bytes, mientras que un tinyint
utilizará 1 byte.
Esos parecen ser tipos de datos de MySQL.
Según la documentación que llevan:
-
tinyint
= 1 byte -
smallint
= 2 bytes -
mediumint
= 3 bytes -
int
= 4 bytes -
bigint
= 8 bytes
Y, naturalmente, acepte rangos de números cada vez más grandes.