Ao configurar um banco de dados no MySQL, o usuário deve atribuir um nome e um tipo de dado a cada coluna de uma tabela. Esse processo ajuda o sistema a entender exatamente que tipo de informação será armazenada e como ela será processada, além de determinar a quantidade de memória necessária.
Existem várias classes principais de tipos de dados nas tabelas do MySQL, incluindo tipos numéricos, de caracteres, de data e hora, entre outros. Cada classe contém vários tipos de dados específicos. É importante defini-los corretamente na fase inicial de criação da tabela para evitar problemas quando a estrutura completa do banco de dados estiver finalizada.
Este artigo descreve os principais tipos de dados do MySQL, sua estrutura, valores válidos e uso recomendado.
O MySQL oferece suporte a todos os tipos de dados numéricos padrão do SQL, usados para armazenar números. Este artigo aborda:
Inteiros
Números de ponto flutuante
Números de ponto fixo
Cada um deles é descrito com mais detalhes a seguir.
Usados para armazenar números inteiros com ou sem sinal. Tipos com sinal podem armazenar valores positivos e negativos, enquanto tipos sem sinal armazenam apenas valores positivos, o que efetivamente dobra o intervalo disponível.
Existem cinco tipos principais de inteiros: TINYINT, SMALLINT, MEDIUMINT, INT e BIGINT. A principal diferença entre eles é o intervalo de valores que podem armazenar — quanto maior o intervalo, maior o consumo de memória. É importante escolher o tipo adequado para alocar memória de forma eficiente ao criar tabelas.
|
Tipo |
Memória (bytes) |
Intervalo com sinal |
Intervalo sem sinal |
|
TINYINT |
1 |
−2⁷ a 2⁷−1 |
0 a 2⁸−1 |
|
SMALLINT |
2 |
−2¹⁵ a 2¹⁵−1 |
0 a 2¹⁶−1 |
|
MEDIUMINT |
3 |
−2²³ a 2²³−1 |
0 a 2²⁴−1 |
|
INT |
4 |
−2³¹ a 2³¹−1 |
0 a 2³²−1 |
|
BIGINT |
8 |
−2⁶³ a 2⁶³−1 |
0 a 2⁶⁴−1 |
Especificar um tamanho (por exemplo, MEDIUMINT(6)) não afeta o intervalo de valores. Isso é apenas estético e usado por algumas ferramentas para preencher números menores com espaços.
Também é possível usar o atributo ZEROFILL para preencher com zeros em vez de espaços. Por exemplo, SMALLINT(8) ZEROFILL exibirá 256 como 00000256.
Usados para armazenar valores numéricos aproximados. O MySQL permite definir a precisão da seguinte forma:
FLOAT(p)
Onde p é a precisão, variando de 0 a 53.
Se p < 25, é usado FLOAT (precisão simples).
Caso contrário, é usado DOUBLE (precisão dupla).
|
Tipo |
Memória (bytes) |
Intervalo de valores |
|
FLOAT |
4 |
~±3,4028 × 10³⁸ |
|
DOUBLE |
8 |
~±1,7976 × 10³⁸ |
Usados para armazenar valores exatos com uma precisão definida. Os tipos DECIMAL ou NUMERIC são utilizados, geralmente em cálculos financeiros onde o arredondamento não é aceitável.
Definição:
DECIMAL(M, D)
M: número total de dígitos (até 65; padrão 10)
D: número de dígitos após o ponto decimal (0–30; padrão 0)
Exemplo:
DECIMAL(6, 3)
Armazena valores de -999.999 a 999.999.
DECIMAL e NUMERIC são funcionalmente equivalentes.
Projetados para armazenar textos curtos, os tipos de dados de caracteres no MySQL incluem CHAR e VARCHAR. Eles são semelhantes, mas diferem na forma como os dados são armazenados e recuperados.
CHAR armazena uma string de comprimento fixo (de 0 a 2⁸−1 caracteres), definida no momento da criação da tabela. Se uma string menor for inserida, os caracteres restantes são preenchidos com espaços.
VARCHAR armazena uma string de comprimento variável (de 0 a 2¹⁶−1 caracteres). Diferentemente de CHAR, ele armazena apenas os caracteres reais e utiliza 1 byte adicional para registrar o comprimento da string.
Se a string de entrada exceder o comprimento definido para CHAR ou VARCHAR, ela será truncada.
Durante a criação da tabela, se colunas CHAR e VARCHAR forem combinadas, o MySQL converterá automaticamente CHAR em VARCHAR.
|
String |
CHAR(5) |
VARCHAR(5) |
|
'A' |
'A ' |
'A' |
|
'Hello' |
'Hello' |
'Hello' |
|
'Example' |
'Examp' |
'Examp' |
O tipo TEXT é usado para armazenar grandes volumes de texto, enquanto BLOB é projetado para dados binários, como imagens, código compilado ou áudio.
Principais diferenças:
BLOB: ordenação e comparações diferenciam maiúsculas de minúsculas.
TEXT: ordenação e comparações não diferenciam maiúsculas de minúsculas.
O MySQL não consegue indexar o comprimento total de campos TEXT ou BLOB, nem suporta ordenação usando índices de campo completo.
Se o comprimento da string exceder o máximo permitido, a entrada será truncada.
|
Tipo |
Memória (bytes) |
Máx. caracteres |
|
TINYTEXT |
2⁸−1 |
até 2⁸−1 |
|
TEXT |
2¹⁶−1 |
até 2¹⁶−1 |
|
MEDIUMTEXT |
2²⁴−1 |
até 2²⁴−1 |
|
LONGTEXT |
2³²−1 |
até 2³²−1 |
|
Tipo |
Memória (bytes) |
Máx. bytes |
|
TINYBLOB |
2⁸−1 |
até 2⁸−1 |
|
BLOB |
2¹⁶−1 |
até 2¹⁶−1 |
|
MEDIUMBLOB |
2²⁴−1 |
até 2²⁴−1 |
|
LONGBLOB |
2³²−1 |
até 2³²−1 |
O MySQL fornece vários tipos de dados para armazenar informações de data e hora:
|
Tipo |
Memória (bytes) |
Descrição |
|
DATE |
3 |
Armazena apenas a data no formato YYYY-MM-DD. |
|
DATETIME |
8 |
Armazena data e hora no formato YYYY-MM-DD HH:MM:SS. |
|
TIMESTAMP |
4 |
Semelhante ao DATETIME, mas com intervalo menor (1970–2038). |
|
TIME |
3 |
Armazena apenas a hora, de −838:59:59 a 838:59:59. |
|
YEAR |
1 |
Armazena apenas o ano no formato YYYY. |
O MySQL oferece suporte nativo ao tipo de dado JSON desde a versão 5.7.8, com as seguintes vantagens:
Validação automática de dados JSON.
Formato de armazenamento binário otimizado para acesso e consultas mais rápidas.
O consumo de memória é aproximadamente equivalente ao LONGTEXT.
O MySQL fornece tipos de dados especiais baseados em strings que armazenam valores de um conjunto fixo predefinido: ENUM e SET.
ENUM armazena um único valor da lista e utiliza até 2 bytes de memória.
SET pode armazenar até 26 valores simultaneamente e utiliza até 8 bytes de memória.
ENUM('a', 's', 'd')
A coluna pode conter apenas um dos seguintes valores: 'a', 's' ou 'd'.
SET('a', 's', 'd')
A coluna pode conter qualquer combinação dos valores, incluindo:
'a', 's', 'd', 'a,s', 'a,d', 's,d', 'a,s,d' ou um conjunto vazio ('').
Se um valor como ('a', 's', 'a') for inserido em um SET, o MySQL removerá automaticamente os duplicados e os ordenará com base na ordem original de declaração. O valor armazenado será 'a,s'.
Este artigo apresentou os tipos de dados do MySQL mais comumente usados para definir colunas de tabelas. Com esse conhecimento, os usuários podem selecionar os tipos apropriados e projetar a estrutura do banco de dados de forma eficaz. Para tipos menos comuns e informações mais detalhadas, consulte a documentação oficial do MySQL.
Você pode utilizar bancos de dados em nuvem da Hostman para praticar o uso do MySQL e seus diferentes tipos de dados. As principais vantagens de usar MySQL na nuvem incluem:
Manutenção e configuração do banco de dados pelo provedor de serviços
Alta confiabilidade, disponibilidade e tolerância a falhas
Backups automáticos
Escalabilidade horizontal e vertical rápida
Operação contínua por meio de replicação em cluster
Execução do banco de dados sobre os recursos computacionais de uma plataforma em nuvem