layout |
---|
editorial |
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.
{% 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 %}
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.
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
.
- MONTEIRO, Lucas. MySQL — Tipos de dados: Introdução e dados numéricos (1 de 3). Disponível em: https://medium.com/mandabugs/mysql-tipos-de-dados-introdu%C3%A7%C3%A3o-e-dados-num%C3%A9ricos-1-de-3-a6e48fb5e1d3. Acesso em 06 Abr. 2023.
- MySQL Data Types. Disponível em: https://dev.mysql.com/doc/refman/8.0/en/data-types.html. Acesso em:
- https://dev.mysql.com/doc/refman/8.0/en/floating-point-types.html
- https://dev.mysql.com/doc/refman/8.0/en/bit-type.html
- MySQL Numeric type attributes. Disponível em: https://dev.mysql.com/doc/refman/8.0/en/numeric-type-attributes.html. Acesso em:
- https://pt.stackoverflow.com/questions/108842/bit1-versus-tinyint1-para-valores-booleanos.