🔢Tipos numéricos

Tipos numéricos inteiros

O MySQL, de acordo com a documentação, suportam os padrões SQL INTEGER (INT é um sinônimo para INTEGER) e SMALLINT e oferecem, ainda os tipos TINYINT, MEDIUMINT e BIGINT, cujas características são descritas na tabela abaixo, adaptada da documentação oficial. Nota-se que os valores mínimos para o tipo numéricos UNSIGNED – sem sinal, ou seja, positivos – tem como valor mínimo 0.

Tipo
Tamanho (em bytes)
Valores mínimo e máximo signed
Valores mínimo e máximo unsigned

TINYINT

1

-128 a 127

0 a 255

SMALLINT

2

-32768 a 32767

0 a 65535

MEDIUMINT

3

-8388608 a 8388607

0 a 16777215

INT ou INTEGER

4

-2147483648 a 2147483647

0 a 4294967295

BIGINT

8

-2^63 a 2^63 - 1

0 a 2^64 - 1

Existem também os tipos BOOL e o sinônimo BOOLEAN, que são armazenados como zero, representando o valor falso, e qualquer valor diferente pode ser considerado verdadeiro.

Além dos tipos apresentados acima, temos também o tipo BIT, compatíveis com engines de armazenamento MyISAM, MEMORY, InnoDB e NDB, segundo a documentação do MySQL; colunas deste tipo armazenam valores binários, no qual podemos passar como argumento um número de 1 (que, por sinal, é o valor padrão) a 64, que representa o tamanho.

Curiosidade

Eu estava arrumando isso aqui e me bateu uma curiosidade: se existe um tipo BIT, não seria mais coerente, até por economia de armazenamento, utilizar este tipo em vez do tipo TINYINT para representar os valores binários verdadeiro/falso?

Encontrei essa discussão no Stack Overflow e penso que é algo interessante a compartilhar com os também curiosos. Lá, eu encontrei uma resposta que resume um pouco essa pergunta: "O tamanho mínimo de armazenamento de uma coluna do tipo BIT é 1 byte, mesmo que só precise de 1 bit".

Recomendo a leitura/participação no tópico.

Propriedades numéricas ZEROFILL (ZF) e UNSIGNED (UN)

A propriedade numérica ZEROFILL, no MySQL, preenche uma coluna com zeros à esquerda do número cujo dado do tipo inteiro tem um tamanho N especificado -- INT(N) --, seguindo a palavra reservada INT.

Drawing

Importante pontuar que o atributo ZEROFILL, uma vez utilizado, implica o uso automático de outra propriedade: UNSIGNED.

Drawing

A propriedade UNSIGNED, segundo a documentação, "pode ser usada para permitir apenas números não negativos numa coluna ou quando você precisa de um conjunto muito maior de números para uma coluna", uma vez que, como mostra a tabela 1, um inteiro SIGNED – propriedade padrão – consegue armazenar números entre -2147483648 e 2147483647, enquanto, com a propriedade UNSIGNED, esse intervalo vai de 0 a 4294967295.

Tipos numéricos de ponto fixo e ponto flutuante

No MySQL, temos um tipo numérico de ponto fixo, com valores exatos, representado pelo tipo DECIMAL, que tem como sinônimos os tipos DEC e FIXED. Há, ainda, o tipo NUMERIC, que no MySQL funciona da mesma maneira que o tipo DECIMAL, de acordo com a documentação, e "esses tipos são usados quanto é importante preservar a precisão exata" do dado a ser armazenado.

Drawing

Os tipos FLOAT e DOUBLE correspondem a dados numéricos aproximados, que podem ser de precisão simples ou dupla. Para o tipo de precisão simples, FLOAT, conforme a documentação do MySQL, opcionalmente, é possível definir a precisão em bits (p) na sequência da palavra-chave: FLOAT(p), seguindo o padrão SQL. Para efeitos práticos, isso permite que uma coluna do tipo FLOAT tenha dupla precisão, ou seja, funcione como uma coluna do tipo DOUBLE.

Drawing

Referências

Last updated

Was this helpful?