Me preguntaba cuál es la diferencia entre BigInt
, MediumInt
y Int
son ... parecería obvio que permitirían números más grandes; Sin embargo, puedo hacer una Int(20)
o una BigInt(20)
y eso parecería que no se trata necesariamente del tamaño.
Alguna idea sería increíble, solo un poco curiosa. He estado usando MySQL durante un tiempo e intenté aplicar las necesidades comerciales al elegir tipos, pero nunca entendí este aspecto.
bar INT ZEROFILL(20)
. Hubiera sido mucho más claro. Pero esa decisión se tomó hace mucho tiempo, y cambiarla ahora rompería millones de instalaciones de bases de datos.El número entre paréntesis en una declaración de tipo es el ancho de visualización , que no está relacionado con el rango de valores que se pueden almacenar en un tipo de datos. El hecho de que pueda declarar
Int(20)
no significa que pueda almacenar valores de hasta 10 ^ 20 en él:Para obtener una lista de los valores máximos y mínimos que se pueden almacenar en cada tipo de datos MySQL, consulte aquí .
fuente
Cita :
fuente
Hasta donde sé, solo hay una pequeña diferencia cuando intentas insertar un valor que está fuera de rango.
INT(20)
para el sistema, esto significa asignar en la memoria un mínimo de 20 bits. Pero si inserta un valor mayor que2^20
, se almacenará con éxito, solo si es menor queINT(32) -> 2147483647
(o2 * INT(32) -> 4294967295
paraUNSIGNED
)Ejemplo:
BIGINT(20)
para el sistema, esto significa asignar en la memoria un mínimo de 20 bits. Pero si inserta un valor mayor que2^20
, se almacenará con éxito, si es menor queBIGINT(64) -> 9223372036854775807
(o2 * BIGINT(64) -> 18446744073709551615
paraUNSIGNED
)Ejemplo:
fuente
Quería agregar un punto más: si está almacenando un número realmente grande como 902054990011312, entonces se puede ver fácilmente la diferencia de
INT(20)
yBIGINT(20)
. Es recomendable almacenar enBIGINT
.fuente
Pongamos un ejemplo para int (10) uno con la palabra clave zerofill, uno no, a la tabla le gusta eso:
Insertemos algunos datos:
Luego
Podemos ver eso
con la palabra clave
zerofill
, num menos de 10 llenará 0, pero sinzerofill
ella noEn segundo lugar, con la palabra clave
zerofill
, int_10_with_zf se convierte en el tipo int sin signo, si inserta un signo menos, obtendrá un errorOut of range value for column.....
. Pero puede insertar menos a int_10. Además, si inserta 4294967291 en int_10 obtendrá un errorOut of range value for column.....
Conclusión:
int (X) sin palabra clave
zerofill
, es igual al rango int -2147483648 ~ 2147483647int (X) con la palabra clave
zerofill
, el campo es igual al rango int sin signo 0 ~ 4294967295, si la longitud de num es menor que X, llenará 0 a la izquierdafuente