Tipo de Dados INT do MySQL Explicado: Valor Máximo, Intervalo, Tamanho de Armazenamento e Alterações de Descontinuação (MySQL 8+)

1. Introdução

MySQL é um sistema de gerenciamento de banco de dados relacional popular, amplamente usado em muitas aplicações web e sistemas de banco de dados. Entre seus tipos de dados, o tipo INT é um dos mais comumente utilizados para manipular valores numéricos. Este artigo fornece uma explicação detalhada do tipo INT do MySQL. Em particular, exploraremos os valores máximos suportados pelo tipo INT e como usá‑lo de forma eficiente. Ao ler este artigo, você obterá o conhecimento necessário para utilizar corretamente o tipo INT no MySQL.

2. Especificações Básicas do Tipo INT

Valores Máximos e Mínimos do INT

O tipo INT do MySQL usa 4 bytes (32 bits) de armazenamento, e o intervalo de valores que ele pode armazenar é o seguinte:

  • Assinado (SIGNED) :
  • Valor mínimo: -2.147.483.648
  • Valor máximo: 2.147.483.647
  • Não assinado (UNSIGNED) :
  • Valor mínimo: 0
  • Valor máximo: 4.294.967.295

Tamanho de Armazenamento do INT

O tipo INT sempre usa 4 bytes de armazenamento. Esse tamanho permanece constante independentemente do valor armazenado. Portanto, se você não precisar lidar com um intervalo numérico muito grande, é mais eficiente considerar tipos de dados menores (por exemplo, TINYINT ou SMALLINT).

Casos de Uso do INT

O tipo INT é comumente usado nos seguintes cenários:

  • Valores auto‑incrementados (por exemplo, IDs de usuário, números de pedido)
  • Dados inteiros usados em cálculos ou processamento estatístico (por exemplo, contagem de estoque, contagem de cliques)
  • Dados representados dentro de um intervalo fixo (por exemplo, idade ou pontuações de teste)

Nesses casos de uso, é importante considerar o intervalo numérico necessário e a eficiência de memória.

3. O que Significa M em INT(M)?

O que é Largura de Exibição (M)?

No MySQL, o M em INT(M) representa a “largura de exibição”. Ele não afeta o valor numérico real armazenado no banco de dados; ao contrário, especifica como o valor será formatado quando exibido. Por exemplo, se definido como INT(5), o número será exibido com uma largura de 5 dígitos.

Entretanto, a largura de exibição M só tem significado no seguinte caso:

  • Quando a opção ZEROFILL está habilitada
  • Exemplo: com INT(5) ZEROFILL, se o valor for 123, ele será exibido como 00123.

Notas Importantes Sobre ZEROFILL

Ao usar a opção ZEROFILL, as seguintes características se aplicam:

  1. Zeros à esquerda são adicionados automaticamente.
  2. O atributo UNSIGNED é aplicado automaticamente.

Portanto, se você precisar armazenar valores negativos, não poderá usar ZEROFILL.

Esclarecendo Equívocos Comuns

Muitos iniciantes acreditam erroneamente que M limita o valor máximo armazenável. Contudo, M afeta apenas a formatação de exibição e não tem absolutamente nenhum impacto no intervalo real de armazenamento.

4. Comparação com Outros Tipos Inteiros

Tipos de Dados Inteiros e Seus Intervalos

MySQL fornece os seguintes tipos inteiros:

Type NameBytesSigned RangeUnsigned Range
TINYINT1 byte-128 to 1270 to 255
SMALLINT2 bytes-32,768 to 32,7670 to 65,535
MEDIUMINT3 bytes-8,388,608 to 8,388,6070 to 16,777,215
INT4 bytes-2,147,483,648 to 2,147,483,6470 to 4,294,967,295
BIGINT8 bytes-9,223,372,036,854,775,808 to 9,223,372,036,854,775,8070 to 18,446,744,073,709,551,615

Critérios de Seleção

Use as diretrizes a seguir ao selecionar um tipo de dado adequado no design do banco de dados:

  • Se o intervalo for pequeno: use TINYINT ou SMALLINT para economizar memória.
  • Se for necessário um intervalo extremamente grande: use BIGINT.
  • Se for desejado um uso de propósito geral: INT costuma ser a escolha ideal.

5. Alterações Desde o MySQL 8.0.17

Descontinuação da Largura de Exibição (M)

A partir do MySQL 8.0.17, a “largura de exibição (M)” para tipos inteiros foi descontinuada. Essa mudança foi introduzida juntamente com a descontinuação da opção ZEROFILL e pode ser removida em versões futuras do MySQL.

Os motivos para descontinuar a largura de exibição são os seguintes:

  1. Causou mal‑entendidos:
  • Muitos usuários entenderam erroneamente que M afetava o valor máximo armazenável ou o número de dígitos.
  1. Uso prático limitado:
  • Como M controlava apenas a formatação de exibição, essa formatação agora costuma ser tratada no lado da aplicação, reduzindo sua necessidade.

Descontinuação do ZEROFILL

A opção ZEROFILL também foi descontinuada na mesma versão. Embora o ZEROFILL fosse conveniente para preencher números com zeros à esquerda, ele não é mais recomendado pelos seguintes motivos:

  • Abordagens alternativas amplamente adotadas:
  • O preenchimento com zeros agora pode ser facilmente tratado na camada de aplicação ou da interface do usuário.
  • Evitar confusão:
  • A aplicação automática do atributo UNSIGNED ao usar ZEROFILL causava confusão para usuários iniciantes.

How to Adapt to the Deprecation

Em resposta a essas descontinuações, considere as seguintes abordagens no design de banco de dados:

  1. Tratar formatação na camada de aplicação:
  • Realizar o preenchimento com zeros e a formatação na camada de aplicação ou de apresentação.
  • Exemplo: Implementar o preenchimento com zeros usando PHP ou JavaScript.
  1. Adote um design que não dependa da largura de exibição:
  • Defina o tipo INT sem especificar M e concentre-se na precisão dos dados em vez da formatação de exibição.

6. Practical FAQ Section

Frequently Asked Questions

Q1. O que acontece se eu armazenar um valor que excede o máximo do tipo INT?
A. No MySQL, tentar armazenar um valor fora do intervalo do tipo INT resultará em um erro. Você deve escolher um valor dentro do intervalo suportado ou mudar para um tipo de dado com intervalo maior (por exemplo, BIGINT).

Q2. Qual é a diferença entre INT e BIGINT?
A. O tipo BIGINT usa o dobro de armazenamento do INT (8 bytes) e fornece um intervalo numérico muito maior. Por exemplo, o intervalo com sinal do BIGINT ultrapassa ±9 quintilhões, tornando‑o adequado para lidar com conjuntos de dados muito grandes.

Q3. Após a descontinuação do ZEROFILL, como devo implementar a exibição com zeros à esquerda?
A. Recomenda‑se tratar o preenchimento com zeros na camada de aplicação. Por exemplo, em PHP você pode usar a função str_pad(), e em JavaScript pode usar o método padStart() para implementar o preenchimento com zeros.

Q4. Como devo escolher entre INT e outros tipos inteiros?
A. Selecione o tipo com base no intervalo de dados. Valores numéricos pequenos (por exemplo, idade ou pontuações) são adequados para TINYINT, dados de escala média (por exemplo, IDs de usuário) são adequados para INT, e valores muito grandes (por exemplo, dados de transações financeiras) são adequados para BIGINT.

7. Conclusion

Neste artigo, fornecemos uma explicação detalhada do tipo de dado MySQL INT. Os pontos principais são os seguintes:

  • Compreender as diferenças entre os valores máximos e mínimos assinados e não assinados do tipo INT forma a base de um design de dados adequado.
  • É importante entender abordagens alternativas às opções descontinuadas “largura de exibição (M)” e “ZEROFILL” e projetar bancos de dados que possam se adaptar a futuras atualizações do MySQL.
  • Selecione o tipo inteiro apropriado com base nas características dos dados para construir um banco de dados eficiente e fácil de manter.

Use este artigo como referência para otimizar o uso do tipo INT e melhorar ainda mais a eficiência no design de bancos de dados MySQL.