Skip to content

Latest commit

 

History

History
68 lines (41 loc) · 8.34 KB

tipos-numericos.md

File metadata and controls

68 lines (41 loc) · 8.34 KB
layout
editorial

🔢 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.

TipoTamanho (em bytes)Valores mínimo e máximo signedValores mínimo e máximo unsigned
TINYINT1-128 a 1270 a 255
SMALLINT2-32768 a 327670 a 65535
MEDIUMINT3-8388608 a 8388607 0 a 16777215
INT ou INTEGER4-2147483648 a 21474836470 a 4294967295
BIGINT8-2^63 a 2^63 - 10 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.

{% hint style="warning" %} Spoiler alert:

Usando nosso querido MySQL Workbench, você vai observar que, ao elaborar um diagrama EER, quando tentar inserir uma coluna do tipo BOOL ou BOOLEAN, a ferramenta mudará esse valor para o tipo TINYINT. {% endhint %}

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.

{% hint style="info" %} 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. {% endhint %}

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.

{% hint style="warning" %} Nota:

A partir do MySQL 8.0.17, a propriedade ZEROFILL e o atributo de largura de exibição para tipos de dados inteiros estão obsoletos, sendo necessário o uso de outros artifícios para produzir os mesmos efeitos. {% endhint %}

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

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.

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.

Referências