Banco de Dados MySQL Tipos de Dados – Dev Content
Banco de Dados MySQL Tipos de Dados
A entidade principal de um banco de dados é a tabela. E uma tabela possui colunas, que chamamos de campos. Os campos possuem tipos.
Os tipos de dados são classificados em diferentes categorias e permitem N formatos. As categorias se diferenciam basicamente pelo espaço em bytes usado por cada uma. E é claro, quanto maior o espaço, maior o conjunto de dados a serem armazenados.
Valor em Bytes
Menor valor com sinal – signed
Menor valor sem sinal – unsigned
Maior valor com sinal – signed
Maior valor sem sinal – unsigned
Bigint 8 -2 elevado à 63 0 2^63-1 2^64-1
Propriedade UNSIGNED: não permite sinal no número.
Os números decimais podem ser de precisão fixa ou ponto flutuante. Ponto flutuante significa dizer que há um arredondamento quando o número de casas decimais for maior do que o permitido no banco, já na precisão fixa há o truncamento seco, sem nenhum arredondamento.
Decimais de Ponto Flutuante
Os dois tipos de decimais com pontos flutuantes permitidos no MySQL são Float e Double. A diferença entre os dois simplesmente é tamanho de armazenamento e, consequentemente, precisão. O Double arredonda com mais precisão e utiliza 8 bytes enquanto o Float utiliza 4.
Decimais de Precisão Fixa
Os Decimais fixos são: Decimal e o Numeric. Os dois são iguais e seu tamanho é definido em número de dígitos. Eles podem ter até 65 dígitos.
Binário também é um tipo numérico, e pode ter um tamanho de até 64 bits.
Alguns Atributos dos Tipos de Dados Numéricos
SIGNED – UNSIGNED: Indica se possui ou não sinal no número;
ZEROFILL: Preenche os algarismos à esquerda com zeros quando não há números;
AUTO_INCREMENT: sequência auto incrementada. Posso decidir se ela começará de zero ou não, bem como o valor de incremento que aplico, se será de um em um ou obedecendo alguma regra específica;
Date: armazena datas desde o dia 01 de janeiro do ano 1000 até 31 de dezembro de 9999. As datas geralmente são armazenadas no formato YYYY-MM-DD ano-mês-dia.
1000-01-01 até 9999-12-31
Datetime: muito parecido com o Date mas além da data, armazena também a hora.
1000-01-01 00:00:00 até 9999-12-31 23:59:59
Timestamp: é muito parecido com o Datetime, mas dois pontos principais a diferenciam. Possui um intervalo menor, abrange da zero hora do dia 01 de janeiro de 1970 à meia noite do dia 19 de janeiro de 2038 e guarda também informações de fuso horário.
1970-01-01 00:00:00 UTC até 2038-01-19 23:59:59 UTC
Um caso de uso do Timestamp pode ser na implementação de um sistema de agendas. Para uma empresa que tem filiais em diversos países, por exemplo, a hora da reunião pode não ser a mesma para todos os participantes e o sistema precisa tratar disso.
Time: armazena somente a hora e tem um intervalo de -838:59:59 até 839:59:59.
Year: armazena somente o ano e vai de 1901 até 2155.
Existem os tipos de dados string não-binários e binários. A diferença é que no primeiro tipo, os dados são armazenados em caracteres, e, no segundo, em binário.
Uma vez que um tipo é armazenado em binário e outro em caractere, as comparações para o tipo não-binário são feitas entre caracteres e os binários são baseados em comparação byte-a-byte.
Os tipos de dados String não-binários são: CHAR, VARCHAR, TEXT, TINYTEXT, MEDIUMTEXT e LONGTEXT.
Os mais utilizados nessa categoria são CHAR e o VARCHAR, cujo tamanho máximo de cada um é 255 caracteres. A diferença entre eles está nos espaços. Vamos explicar com um exemplo:
Digamos que eu tenha declarado um campo com tamanho quatro - CHAR(4), ou seja, suporta, no máximo, quatro caracteres.
Quero armazenar nesse campo o dado 'aa', que ocuparia dois caracteres. Se o campo for do tipo CHAR, será gravado dois espaços em branco, e depois, de fato dois caracteres de dados. Ficando da seguinte forma: ' aa'. O resultado é que os quatro caracteres serão ocupados sempre, mesmo que com espaços em branco.
Agora, se eu tiver o mesmo campo, delimitando seu tamanho máximo em quatro, mas com o tipo VARCHAR, ao gravar o dado 'aa' somente dois caracteres seriam ocupados.
Dessa forma, em situações onde gravar o vazio não é importante, é mais conveniente usar o VARCHAR por ocupar menos espaço em disco.
Os tipos TEXT são usados para armazenar texto longo.
Já os tipos de dados Strings que armazenam e manipulam os dados de forma binária são o BINARY, VARBINARY, BLOB, TINYBLOB, MEDIUMBLOB e LONGBLOB.
Os mais usados são o BINARY e o VARBINARY que seguem a mesma lógica do CHAR e VARCHAR, com a diferença de que armazenam e manipulam os dados em binários e não em caracteres. Portanto, quando especificamos o tamanho do campo esse tamanho é em bytes.
A família dos BLOBs (binary large objects) armazena binários longos. Com esse tipo de campo, posso por exemplo, armazenar os binários de uma foto ou música dentro do banco de dados, embora recuperar esses dados na sequência seja um processo lento.
Atributos de Campos do Tipo String
Ao separar o COLLATE LATIN1_GENERAL_CS_AI, temos as seguintes funções.
Note que no primeiro SQL eu estou utilizando AI (Accent Insensitie) , ou seja, acentos não me interessam e CI (Case Insensitive), ou seja, não me importa se tiverem caracteres maiúsculos ou minúsculos. E com isso o meu resultado será True, pois no texto eu possuo a palavra VOCÊ.
Só aceita os valores que enumerarmos na criação do campo. Exemplo, criando um campo chamado FORMA_DE_PAGAMENTO e elegendo BOLETO, DINHEIRO e CARTAO, essas serão as únicas entradas permitidas.
O null é um tipo especial suportado pelo banco de dados para representar o vazio, e o padrão do MySQL é permitir null nas colunas. Se você não quiser esse comportamento para um campo específico, informe com a sintaxe not null na criação ou alteração da tabela.