Pessoal, neste post vou falar sobre os tipos de dados suportados pelo MySQL e suas derivações. Quando falamos em tipos de dados, isso está inteiramente ligado a normalização e criação das tabelas do seu esquema (Schema) ou banco de dados (database). Precisamos entender como nosso SGBD trabalha ao efetuar o armazenamento de dados de diferentes tipos, sendo eles do Tipo “Texto”, “Numérico” e “Temporal”. O MySQL para isso suporta diferentes tipos de dados (data types) para atender nossa necessidade, quando vamos utilizá-las, esses tipos de dados são divididos em 3 categorias:
* Dados de Tipo “Texto”
* Dados de Tipo “Numérico”
* Dados de Tipo “Temporal”

Veja abaixo um breve detalhamento dos tipos de dados:
Dados do Tipo “Texto”
Na tabela abaixo, vou demonstrar os tipos de dados “Texto” não-binário suportado pelo MySQL

Para dados do Tipo Texto temos que entender, qual tipo se encaixa melhor para a coluna da tabela que criaremos. No caso de armazenarmos uma coluna “nome_completo” do tipo varchar(60), já seria o suficiente para esse tipo de informação. Por isso temos que saber o quanto será necessário para armazenar um determinado tipo de informação de acordo com os tipos de dados suportados pelo nosso SGBD.
Veja na tabela abaixo, os tipos de dados “Texto” binário suportado pelo MySQL.

Para utilizarmos esses tipos de dados, precisamos conhecer a necessidade de armazenamento da informação em formato binário no MySQL. No Caso de um cadastro de produto que precisa armazenar uma foto do produto, criaremos em nossa tabela uma coluna do tipo Blob para armazenar a imagem em formato binário.
Veja na tabela abaixo, que também podemos armazenar dados do tipo “Texto” em formato de lista

Para utilizar esse tipo de dados, dependendo da aplicação podemos fornecer uma lista com o nome dos estados do Brasil ao invés de cadastrar essa informação em linhas na nossa tabela. Com a utilização deste tipo de dados, podemos validar informações com listas diretamente no MySQL.

Dados do Tipo “Numérico”


Veja na tabela abaixo, os tipos de dados numéricos inteiros, suportados pelo MySQL

Quando você cria uma coluna usando um dos tipos inteiros, o MySQL alocará uma quantidade de espaço apropriado para armazenar os dados, variando de um byte para um tinyint até oito bytes para um bigint. Portanto, você deve tentar escolher um tipo que seja grande o suficiente para armazenar o maior número previsto para a coluna sem desperdiçar espaço de armazenamento de forma desnecessária. Também vale lembrar que caso você não deseje armazenar números inteiros com sinal ou negativos, você terá que informar que os dados que serão gravados nessa coluna são inteiros positivos e sem sinal (unsigned). Exemplo create table teste (i int unsigned);

Também possuímos alguns sinônimos para o tipo BIT e BOOLEAN:

Estes são sinônimos para TINYINT até a versão MySQL 5.0.3, após essa versão o BIT não é mais sinônimo para TINYINT.

Veja na tabela abaixo, os tipos de dados numéricos de ponto flutuante e ponto fixo:

Ao usar um tipo de ponto flutuante, você pode especificar uma precisão (o numero total de dígitos permitidos tanto à esquerda quanto à direita do ponto decimal) e uma escala ( o numero de dígitos permitidos à direita do ponto decimal). Mais isso não é obrigatório. Se você especificar uma precisão e uma escala para sua coluna de ponto flutuante, lembre de que os dados armazenados na coluna serão arredondados se o numero de dígitos excederem a escala e/ou a precisão da coluna. Por exemplo, uma coluna definida como float(4,2) armazenará um total de quatro dígitos, dois à esquerda e dois à direita do ponto decimal. Portanto, uma coluna desse tipo traria os números 24.77 e 8.19 sem problema, mais o numero 17.8675 seria arredondado para 17.86 e a tentativa de armazenar o número 178.357 na sua coluna float(4,2) geraria um erro.

Também possuímos sinônimos para dados numéricos de ponto fixo, representados por “DEC(p,e)”, “NUMERIC(p,e)” e “FIXED(p,e)” fazendo referência ao tipo DECIMAL.

Dados do tipo “Temporal”

Veja na tabela abaixo, os tipos de dados temporais suportados:

Além de strings e números, muito provavelmente você também se verá trabalhando com datas e/ou horários. Esse tipo de dados é conhecido como temporal, e alguns exemplos de dados temporais em um banco de dados incluem:

* A data futura em que se espera a ocorrência de um evento específico, como o envio de pedido de um cliente.
* A data em que um pedido de um cliente foi enviado.
* A data de nascimento de um funcionário.
* A data e o horário em que um usuário modificou uma linha em particular em uma tabela.

Como vocês perceberam na o MySQL inclui tipos de dados que tratam todas essas situações exemplificadas acima.
Apesar de os servidores de banco de dados armazenarem dados temporais de diversas maneiras, o propósito da string de “formato padrão”(na tabela acima demonstrando os dados temporais) é mostrar como os dados serão representados quando retornados, junto com a forma em que uma string de data deve ser construída ao inserir ou atualizar uma coluna temporal.

Bem essa foi uma breve abordagem sobre os tipos de dados suportados pelo MySQL. Abaixo segue os links dos arquivos utilizados para formular este post.
Fonte:
http://dev.mysql.com/doc/refman/5.5/en/data-type-overview.html
http://www.devshed.com/c/a/MySQL/MySQL-Data-and-Table-Types-62908/
http://imasters.com.br/artigo/9196/mysql/tipos-de-dados-do-mysql-50
http://www.samueldiasneto.com/mysql/tipos.html
http://xoops.net.br/docs/mysql/manual/ch06s02.php#.UELaSyJmO3q
Galera, eu recomendo que possam ler os artigos dos links acima para poder ter um entendimento melhor e complementar ao que foi proposto neste post. Qualquer dúvida quanto ao post estou ao dispor para saná-la. Que a Graça e Paz estejam com todos vocês.