TIPOS DE DADOS MYSQL
Tipos de dados são uma forma de classificar as informações que serão armazenados no banco de dados e de definir antecipadamente: Tutorial MySQL Tipos de dados
• • • • • •
Os tipos de valores que podem ser usados; Que tamanhos podem ter As operações que podem ser realizadas; Seus significados; Se podem/serão indexados Como devem ser armazenados etc.
Entender os tipos de dados que podem ser armazenados no banco e a que situações se adequam é importante para projetar um banco de dados o mais eficiente possível. Veja, a seguir, alguns dos tipos de dados mais comuns no MySQL, acompanhado de uma breve descrição.
Tipos de dados numéricos O MySQL tem todos os tipos numéricos possíveis, o que inclui exatos, aproximados, inteiros, de ponto fixo, ponto flutuante etc. A lista, abaixo, mostra um resumo dos tipos de dados possíveis no MySQL: • • • • • • •
TINYINT — número inteiro muito pequeno (tiny); SMALLINT — número inteiro pequeno; MEDIUMINT — número inteiro de tamanho médio; INT — número inteiro de tamanho comum; BIGINT — número inteiro de tamanho grande; DECIMAL — número decimal, de ponto fixo; FLOAT — número de ponto flutuante de precisão simples (32 bits); • DOUBLE — número de ponto flutuante de precisão dupla (64 bits); • BIT — um campo de um bit.
Tipos de dados em strings Strings são cadeias de caracteres. No MySQL, uma string pode ter qualquer conteúdo, desde texto simples a dados binários – tais como imagens e arquivos. Cadeias de caracteres podem ser comparadas e ser objeto de buscas. • • • • • • • • • • • • •
CHAR — uma cadeia de caracteres (string), de tamanho fixo e não-binária; VARCHAR — uma string de tamanho variável e não-binária; BINARY — uma string binária de tamanho fixo; VARBINARY — uma string binária de tamanho variável; BLOB — um BLOB (Binary Large OBject – OBjeto Grande Binário) pequeno; TINYBLOB — um BLOB muito pequeno; MEDIUMBLOB — um BLOB de tamanho médio; LONGBLOB — um BLOB grande; TINYTEXT — uma string não-binária e de tamanho bem reduzido; TEXT — uma string não-binária e pequena; MEDIUMTEXT — uma string de tamanho comum e não-binária; LONGTEXT — uma string não-binária de tamanho grande; ENUM — de acordo com o manual do MySQL, é uma string, com um valor que precisa ser selecionado de uma lista predefinida na criação da tabela; • SET — é um objeto que pode ter zero ou mais valores – cada um dos quais precisa ser escolhido de uma lista de valores predeterminados quando da criação da tabela.
Armazenamento de data e hora Há várias opções para armazenar dados relacionados a data e hora. Se você quiser apenas armazenar o ano referente a um evento, pode usar o tipo YEAR. O tipo TIMESTAMP pode ser usado para acompanhar as mudanças ocorridas em um campo de uma tabela. Veja os tipos e suas descrições: • DATE — o valor referente a uma data no formato 'CCYY-MM-DD'. Por exemplo 1985-11-25 (ano-mês-dia). O 'CC' se refere aos dois dígitos do século (Century, em inglês); • TIME — um valor horário no formato 'hh:mm:ss' (hora:minutos:segundos); • TIMESTAMP — timestamp é uma sequência de caracteres ou informação codificada que identifica uma marca temporal ou um dado momento em que um evento ocorreu. No MySQL, ele tem o formato 'CCYY-MM-DD hh:mm:ss' – neste caso, seguem a padronização ISO 8601; • YEAR — armazena um ano no formato 'CCYY' ou 'YY';
Dados espaciais O MySQL tem suporte a tipos de dados que correspondem às classes OpenGIS. Alguns destes carregam valores geométricos simples: • • • • •
GEOMETRY POINT LINESTRING POLYGON O GEOMETRY pode armazenar qualquer tipo de valor geométrico. Os outros valores simples (POINT, LINESTRING e POLYGON) têm seus valores restritos aos tipos geométricos a que se referem. • Os outros, que seguem listados, carregam valores relativos a coleções/coletivos: • • • •
GEOMETRYCOLLECTION MULTILINESTRING MULTIPOINT MULTIPOLYGON
Os tipos de dados de armazenamento de strings no MySQL 5.0 podem ser binários ou não-binários, ou seja, podem conter somente caracteres ou somente bytes. O que difere os tipos de dados binários de nãobinários é que os não-binários são baseados em comparações entre caracteres e os binários são baseados em comparações byte-a-byte. Tipos de Dados Não-Binários
Os tipos de dados CHAR, VARCHAR, TEXT, TINYTEXT, MEDIUMTEXT eLONGTE XT são tipos de dados não-binários que armazenam seqüências de caracteres disponíveis em um determinado conjunto de caracteres que por sua vez tem também um COLLATE específico (COLLATE ouCOLLATION é um conjunto de regras de comparações de strings utilizado para comparar e ordenar caracteres). O conjunto de caracteres pode ser definido no servidor de banco de dados, na criação do banco de dados, na criação da tabela ou na criação da coluna de uma tabela.
Tipos de dados não-binários diferem de tipos de dados binários pois armazenam caracteres e seu espaço é medido em caracteres, além de sua comparação ser baseada em caracteres. Por exemplo, digamos que temos a tabela tab1 com uma coluna chamada NOME e esta coluna tem o seu tipo de dado definido como CHAR(60). Esta coluna armazena 60 caracteres e um byte por caractere. No conjunto de caracteres latin1, esta coluna, ao ser criada com o tipo de dado CHAR, já alocaria seu espaço mínimo de 60 bytes. O conjunto de caracteres utf8 requer entre dois ou três bytes para cada valor, então, para esta coluna, utilizando o conjunto de caracteres utf8, teremos alocado fixamente no arquivo de dados em disco, após a criação da tabela, 180 bytes para cada valor da coluna. Se utilizarmos o conjunto de caracteres ucs2 Unicode, este, por sua vez, requer dois bytes por valor. Mesmo requerendo mais espaço, cada caractere é único ocupando mais de um byte.
http://imasters.com.br/artigo/9332/mysql/os -tipos-de-dados-no-mysql--string/
Existe um grande paradoxo quando o assunto se vira para os tipos de dados CHAR e VARCHAR. O tipo CHAR apresenta tamanho fixo, alçando mais espaço em disco e tem melhor desempenho quando se recupera dados. Por outro lado, o tipo VARCHAR ocupa menos espaço em disco pois não ocupa toda a largura do campo, somente o tamanho da string inserida mais um ou dois bytes dependendo do tamanho da string para armazenar sua quantidade de caracteres (0 à 255 = 1 byte, 256 à 65535 = 2 bytes).
Toda vez que informações são lidas para o seu retorno e estas informações vem de campos cujo tipo de dado é VARCHAR, o SGBD lerá seu cabeçalho para verificar o tamanho da string que é armazenada no campo antes de retornar, isso para cada linha/tupla da tabela. Podemos resumir esse paradoxo da seguinte forma: “o que mais lhe importa, que seu banco de dadosd consuma menos espaço em disco ou que sua consulta atenda mais rápido aos seu cliente?“, disco é barato, ter um sistema todo comprometido por má performance pode custar bem mais caro! Podemos notar que tabelas que utilizam campos com a definição de seu tip de dado VARCHAR, são do tipo dinâmicas. Caso você utilize somenteCHAR, elas terão o seu tipo fixo, mais performance na recuperção de dados.