MySQL suporta todos os tipos numéricos da ANSI/ISO SQL92. Estes
        tipos incluem o tipos de dados numéricos exatos
        (NUMERIC, DECIMAL,
        INTEGER, e SMALLINT),
        assim como o tipos de dados numéricos aproximados
        (FLOAT, REAL, e
        DOUBLE PRECISION). A palavra-chave
        INT é um sinônimo para
        INTEGER, e a palavra-chave
        DEC é um sinônimo para
        DECIMAL.
      
        Os tipos NUMERIC e DECIMAL
        são implementados como o mesmo tipo pelo MySQL, como permitido
        pelo padrão SQL92. Eles são usados por valores para os quais
        é importante preservar a exatidão como, por exemplo, dados
        monetários. Quando é declarado um campo de algum desses tipos
        a precisão e a escala podem ser (e normalmente é)
        especificadas; por exemplo:
      
salario DECIMAL(5,2)
        Neste exemplo, 5
        (precisão) representa o número de digitos
        decimais significantes que serão armazenados no valor, e
        2 (escala) representa o
        número de dígitos que serão armazenados após o ponto
        decimal. Neste caso, no entanto, a faixa de valores que podem
        ser armazendos na coluna salario é de
        -99.99 a 99.99. (MySQL
        pode, na verdade, armazenar numeros acima de
        999.99 neste campo porque ele não precisa
        armazenar o sinal para números positivos).
      
        Em ANSI/ISO SQL92, a sintaxe DECIMAL(p) é
        equivalente a DECIMAL(p,0). Da mesma forma, a
        sintaxe DECIMAL é equivalente a
        DECIMAL(p,0), onde a implementação permite
        decidir o valor de p. MySQL ainda não
        suporta nenhuma dessas duas formas variantes dos tipos de dados
        DECIMAL/NUMERIC. Este,
        geralmente, não é um problema sério, já que os principais
        benefícios destes tipos derivam da habilidade de controlar
        precisão e escala explicitamente.
      
        Valores DECIMAL e NUMERIC
        são armazenados como strings, ao invés de um número de
        ponto-flutuante binário, para preservar o precisão decimal
        destes valores. Um caracter é usado para cada digito, para o
        ponto decimal (se escala > 0), e para o
        sinal ‘-’ (para números
        negativos). Se escala é 0, valores
        DECIMAL e NUMERIC não
        contém ponto decimal ou parte fracionária.
      
        A faixa máxima dos valores DECIMAL e
        NUMERIC é o mesmo do
        DOUBLE, mas a faixa real para um campo
        DECIMAL or NUMERIC pode
        ser limitado pela precisão ou pela
        escala para uma dada coluna. Quando é
        atribuído a uma coluna um valor com mais digitos após o ponto
        decimal do que o permitido especificado na
        escala, o valor é arredondado para aquela
        escala. Quando é atribuido um valor a uma
        coluna DECIMAL ou NUMERIC
        o qual excede a faixa determinada pelas
        precisão e escala
        especificada (ou padrão), MySQL armazena o valor correspondente
        ao final daquela faixa.
      
        Como uma extensão do padrão ANSI/ISO SQL92, MySQL também
        suporta os tipos integrais TINYINT,
        MEDIUMINT, e BIGINT como
        listado nas tabelas abaixo. Outra extensão suportada pelo MySQL
        é especificar, opcionalmente, o tamanho do display de um valor
        inteiro entre parenteses seguindo o nome do tipo (por exemplo,
        INT(4)). Esta especificação opcional do
        tamanho é usada para preenchimento a esquerda do display de
        valores cujo tamanho é menor que o especificado para a coluna,
        mas não limita a faixa de valores que podem ser armazendos na
        coluna, nem o número de dígitos que serão mostrados para
        valores que excederem o tamanho especificado na coluna. Quando
        usados em conjunto com o atributo opcional de extensão
        ZEROFILL, o padrão do preenchimento de
        espaços é a substituição por zeros. Por exemplo, para uma
        coluna declarada com INT(5) ZEROFILL, o valor
        4 é retornado como 00004.
        Note que se você armazenar valores maiores que a largura do
        display em um coluna do tipo inteiro, você pode ter problemas
        quando o MySQL gerar tabelas temporárias para algum join
        complicado, já que nestes casos o MySQL acredita que os dados
        cabem na largura original da coluna.
      
        Todos os tipos inteiros podem ter um atributo opcional
        (não-padrão) UNSIGNED. Valores sem sinal
        podem ser usados quando você permite apenas números positivos
        em uma coluna e você precisa de uma faixa de valores um pouco
        maior para a coluna.
      
        Desde o MySQL 4.0.2, tipos de ponto flutuante também podem ser
        sem sinal (UNSIGNED). Como no tipos inteiros,
        este atributoprevine que valores negativos sejam armazenados na
        coluna. Ao contrário dos tipos negativos, o valor máximo da
        faixa permitida permanece o mesmo.
      
        O tipo FLOAT é usado para representar tipos
        de dados numéricos aproximados. O padrão SQL-92 permite uma
        especificação opcional da precisão (mas não da faixa do
        expoente) em bits, após a a palavra FLOAT e
        entre parenteses. A implementação MySQL também suporta esta
        especificação opcional de precisão. Quando
        FLOAT é usada para uma tipo de coluna sem
        especificação de precisão, MySQL utiliza quatro bytes para
        armazenar os valores. Uma sintaxe variante também é suportada,
        com dois numeros entre parenteses após a palavra
        FLOAT. Com esta opção, o primeiro número
        continua a representar a quantidade de bytes necessária para
        armazenar o valor, e o segundo número especifica o número de
        dígitos a serem armazenados e mostrados após o ponto decimal
        (como com DECIMAL e
        NUMERIC). Quando é pedido ao MySQL para
        armazenar um número em uma coluna com mais digitos decimais
        após o ponto decimal que o especificado para esta coluna, o
        valor é arredondado eliminando os digitos extras quando
        armazenado.
      
        Os tipos REAL e DOUBLE
        PRECISION não aceitam especificações de precisão.
        Como uma extensão do padrão SQL-92, o MySQL reconhece
        DOUBLE como um sinônimo para o tipo
        DOUBLE PRECISION. Em constraste com a
        exigencia do padrão de que a precisão do tipo
        REAL seja menor que aquele usado pelo
        DOUBLE PRECISION, MySQL implementa ambos como
        valores de ponto flutuante de 8 bits de dupla precisão (quando
        não estiver executando em ``modo ANSI''). Para uma
        portabilidade máxima, códigos que requerem armazenamento de
        valores de dados numéricos aproximados usam
        FLOAT ou DOUBLE PRECISION
        sem especificação de precisão ou de numeros decimais.
      
Quando solicitado a armazenar um valor em uma coluna numérica que está fora da faixa permitida pelo tipo da coluna, o MySQL ajusta o valor ao limite da faixa permitida mais apropriado e armazena este valor.
        Por exemplo, a faixa de uma coluna INT é de
        -2147483648 a 2147483647.
        Se você tentar inserir -9999999999 em uma
        coluna INT, o valor é ajustado para o limite
        mais baixo da faixa de valores e -2147483648
        é armazenado. Da mesma forma, se você tentar inserir
        9999999999, 2147483647
        será armazenado.
      
        Se o campo INT é
        UNSIGNED, o tamanho da faixa do campo é o
        mesmo mas o limite passa a ser de 0 a
        4294967295. Se você tentar armazenar
        -9999999999 e 9999999999,
        os valores armazenados na coluna serão 0 e
        4294967296.
      
        Conversões que ocorrem devido a ajustes são relatados como
        ``avisos'' para ALTER TABLE, LOAD
        DATA INFILE, UPDATE, e instruções
        INSERT multi-registros.
      
| Tipo | Bytes | De | Até | 
| TINYINT | 1 | -128 | 127 | 
| SMALLINT | 2 | -32768 | 32767 | 
| MEDIUMINT | 3 | -8388608 | 8388607 | 
| INT | 4 | -2147483648 | 2147483647 | 
| BIGINT | 8 | -9223372036854775808 | 9223372036854775807 | 
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

