"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que o MySQL transforma inteiros grandes inseridos em colunas mais curtas?

Por que o MySQL transforma inteiros grandes inseridos em colunas mais curtas?

Publicado em 13/11/2024
Navegar:226

Why does MySQL transform large integers inserted into shorter columns?

Compreendendo a transformação de colunas numéricas no MySQL

O MySQL geralmente transforma números inteiros longos em valores inesperados quando inseridos em colunas mais curtas. Em vez de truncar, o MySQL ajusta o valor armazenado. Esse comportamento é atribuído ao mecanismo de overflow de inteiro.

Por exemplo, considere uma coluna chamada some_number com comprimento 10. Quando um número que excede esse comprimento (por exemplo, 715988985123857) é inserido, ele é transformado em 2147483647.

O mecanismo de overflow

De acordo com a documentação do MySQL, o overflow de número inteiro ocorre quando o resultado de um cálculo excede o valor máximo permitido para o tipo de dados. Nesse caso, o valor máximo para um número inteiro de 10 bits é 2147483647.

Fórmula para resultado calculado

A transformação segue uma fórmula específica:

Result = Number % (2^Bits) - 1

onde:

  • Number é o número original que está sendo inserido
  • Bits é o número de bits no coluna de destino

Em nosso exemplo, Número é 715988985123857 e Bits é 10, resultando em:

2147483647

BigInt vs. &&&]Para evitar estouro de número inteiro, use um tipo de dados bigint para números inteiros maiores. BigInt pode armazenar valores de até 2^63-1, evitando problemas de truncamento ou transformação.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3