Fiquei me perguntando qual a diferença entre BigInt
, MediumInt
e Int
são ... parece óbvio que eles permitiriam números maiores; no entanto, posso fazer um Int(20)
ou um BigInt(20)
e isso faria parecer que não é necessariamente sobre tamanho.
Alguma visão seria incrível, meio que curiosa. Estou usando o MySQL há um tempo e tentando aplicar as necessidades de negócios ao escolher tipos, mas nunca entendi esse aspecto.
bar INT ZEROFILL(20)
. Teria sido muito mais claro. Mas essa decisão foi tomada há muito tempo e alterá-la agora quebraria milhões de instalações de banco de dados.O número entre parênteses em uma declaração de tipo é a largura de exibição , que não está relacionada ao intervalo de valores que podem ser armazenados em um tipo de dados. Só porque você pode declarar
Int(20)
não significa que você pode armazenar valores de até 10 ^ 20 nele:Para uma lista dos valores máximos e mínimos que podem ser armazenados em cada tipo de dados MySQL, veja aqui .
fonte
Citação :
fonte
Até onde eu sei, há apenas uma pequena diferença quando você está tentando inserir um valor que está fora do intervalo.
INT(20)
um sistema, isso significa alocar na memória no mínimo 20 bits. Mas se você inserir um valor maior que2^20
, ele será armazenado com êxito, apenas se for menor queINT(32) -> 2147483647
(ou2 * INT(32) -> 4294967295
paraUNSIGNED
)Exemplo:
BIGINT(20)
um sistema, isso significa alocar na memória no mínimo 20 bits. Mas se você inserir um valor maior que2^20
, ele será armazenado com sucesso, se for menor queBIGINT(64) -> 9223372036854775807
(ou2 * BIGINT(64) -> 18446744073709551615
paraUNSIGNED
)Exemplo:
fonte
Queria acrescentar mais um ponto: se você estiver armazenando um número realmente grande como 902054990011312, poderá ver facilmente a diferença de
INT(20)
eBIGINT(20)
. É aconselhável armazenar emBIGINT
.fonte
Vamos dar um exemplo para int (10) um com a palavra-chave zerofill, outro não, a tabela gosta disso:
Vamos inserir alguns dados:
Então
Nós podemos ver isso
com a palavra-chave
zerofill
, num inferior a 10 preencherá 0, mas semzerofill
ela nãoEm segundo lugar, com a palavra-chave
zerofill
, int_10_with_zf se torna um tipo int sem sinal; se você inserir um sinal de menos, receberá um erroOut of range value for column.....
. Mas você pode inserir menos para int_10. Além disso, se você inserir 4294967291 em int_10, receberá um erroOut of range value for column.....
Conclusão:
int (X) sem palavra-chave
zerofill
, é igual ao intervalo int -2147483648 ~ 2147483647int (X) com a palavra-chave
zerofill
, o campo é igual ao intervalo int não assinado de 0 a 4294967295, se o comprimento de num for menor que X, ele preencherá 0 à esquerdafonte