Buscar

Tipos de Dados em Bancos de Dados

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 33 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 33 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 33 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Capítulo 7 
Conhecendo os tipos de dados 
Uma das fases do projeto de bancos de dados é a escolha dos tipos de dados das colunas que 
constituem as tabelas. As implementações SQL oferecem várias opções de tipos e é preciso 
conhecer as características e limitações de cada um: uma coluna que armazena preços, por 
exemplo, tem requisitos diferentes de uma coluna que armazena datas, ou nomes. Para cada 
caso, há tipos que são mais ou menos adequados. Prevendo corretamente os valores que devem 
ser armazenados e fazendo a escolha certa, o projetista previne dores de cabeça e retrabalho no 
futuro. 
Escolha certa, neste caso, significa empregar tipos que 
• suportam a gama de valores que um atributo pode assumir; 
• suportam as operações efetuadas sobre esses valores;1 
• atendidas as condições acima, requerem o menor espaço de armazenagem possível. 
Além do projeto de bancos de dados, a construção de consultas SQL é outro motivo importante 
para conhecer melhor os tipos de dados, pois alguns operadores são sensíveis aos tipos de dados 
dos atributos, como os operadores aritméticos e de comparação. Eventualmente, pode ser 
preciso converter alguns dados de um tipo para outro, de modo a permitir certas operações. 
Este capítulo apresenta os vários tipos de dados disponíveis no Access, MySQL, Oracle e SQL 
Server, detalhando-os quanto à sua finalidade, gama de valores, requisitos de armazenagem e 
operações permitidas. As funções de conversão de dados são apresentadas no capítulo 8. 
7.1 TIPOS DE DADOS 
Os tipos de dados disponíveis nas implementações SQL podem ser categorizados em seis 
grandes grupos, a saber: 
Lógicos que armazenam os valores lógicos verdadeiro e falso; 
Numéricos que armazenam números, reais ou inteiros; 
Calendário que armazenam registros de tempo, tais como datas e horas; 
Strings que armazenam cadeias de caracteres, tais como nomes, textos, etc; 
Binários que armazenam dados não regularmente estruturados, tais como figuras, fotos, 
sons, etc; 
Específicos que armazenam dados específicos de cada implementação, tais como 
identificadores especiais. 
Derivados que podem ser definidos pelo usuário a partir de combinações dos tipos 
primitivos. 
 
1 Note que as operações abrangem ordenação de registros com base no atributo e utilização do 
mesmo atributo em índices, que são fatores que auxiliam na determinação correta de um tipo. 
2 Capítulo 7: Conhecendo os tipos de dados 
 
TIPOS DE DADOS LÓGICOS 
Algumas implementações, como o Access, reservam um tipo de dados específico para a 
armazenagem de valores lógicos, como verdadeiro/falso ou sim/não. Esses tipos são ditos 
lógicos porque possuem um domínio de apenas dois valores, além do valor nulo. Tipos lógicos 
são manipulados através dos operadores lógicos como not, and, or, que os combinam em 
expressões lógicas. 
Algumas implementações não distinguem entre tipos lógicos e outros tipos, sendo possível 
construir expressões lógicas onde qualquer tipo pode ter o papel que seria de um tipo lógico. 
Leia mais sobre isto nas seções que detalham os tipos de cada implementação. 
TIPOS DE DADOS NUMÉRICOS 
Há três tipos básicos de tipos de dados numéricos nas implementações de bancos de dados: 
números reais de ponto flutuante, números inteiros, com e sem sinal, e números decimais, que 
são números reais com ponto fixo. 
Os números reais de ponto flutuante são velhos conhecidos dos computadores, e normalmente 
apresentam-se com precisão simples (armazenados em 4 bytes) ou dupla (armazenados em 8 
bytes), dependendo da gama de valores requerida. Embora permitam números de alta ordem, os 
números de ponto de flutuante, por sua própria concepção, têm a desvantagem de serem 
representados por valores às vezes aproximados. Por este motivo, são pouco indicados para 
representar grandezas financeiras, uma vez que os valores, neste caso, têm que ser exatos. 
Os números inteiros são bastante utilizados em aplicações de bancos de dados e apresentam-se 
em tipos cujos valores permitidos variam sensivelmente. Tipicamente, há inteiros com 1, 2, 4 e 
8 bytes, o que requer especial atenção do projetista na escolha do tipo adequado. Por exemplo, 
um atributo que represente o número de itens numa nota fiscal certamente tem valores muito 
diferentes do que outro que represente a quantidade de refrigerantes vendidos no mundo nos 
últimos 12 meses. Além disso, os números inteiros podem ter sinal ou não. Por exemplo, um 
número inteiro de um byte pode representar valores entre –128 e 127, se o sinal for considerado, 
ou valores entre 0 e 255, sem sinal. Isto pode representar uma diferença importante se o sinal 
não for necessário, como no caso dos itens da nota fiscal. 
Os números decimais são uma representação especial de números reais, com ponto fixo: o 
número total de dígitos e o número de casas decimais é estabelecido na definição do tipo. Com 
isso, fica mais apropriada a manipulação de valores financeiros (o que é muito comum em 
bancos de dados), pois pode-se ter números reais não aproximados. 
Números decimais têm precisão e escala. Precisão determina o número máximo de dígitos no 
número e escala determina quantos desses dígitos estão à direita do ponto decimal. Note que, 
para números de ponto flutuante não há uma escala pré-determinada, daí sua denominação. 
Normalmente, um valor que tem mais casas decimais que seu tipo determina é arredondado; se 
tiver mais dígitos à esquerda do ponto decimal, é truncado. Veja alguns exemplos de valores 
fornecidos, tipos e valores armazenados. 
56374,5689 DECIMAL (14,4) 56374,5689 
56374,5689 DECIMAL (14,3) 56374,569 
56374,5689 DECIMAL (14,0) 56375 
Em algumas implementações admite-se escala negativa. Neste caso, o número é arredondado 
antes da casa decimal. Exemplos 
56374,5689 DECIMAL (14,-1) 56370 
56374,5689 DECIMAL (14,-2) 56400 
Error! Style not defined. 3 
 
Também é possível o caso em que a precisão é menor que a escala. Neste caso, limita-se o 
número de dígitos que aparecem após a casa decimal, como nos exemplos a seguir. 
0,0000005689 DECIMAL (2,7) 0,0000005 
0,05689 DECIMAL (3,4) 0,0568 
A implementação de números decimais pode variar bastante, pois um número decimal pode ser 
armazenado como um inteiro escalado (com uma parte decimal imaginária), uma string de 
dígitos numéricos que é convertida quando operada, ou outras formas compactadas. Números 
decimais podem ter sinal ou não. 
Tipos numéricos podem ser operados livremente através dos operadores aritméticos e de 
comparação. Normalmente, quando um ou mais tipos numéricos distintos são envolvidos numa 
operação aritmética, todos são convertidos para um tipo comum (o mais genérico) e então as 
operações são realizadas. Ao final da expressão, o resultado é convertido para o tipo designado 
para receber o valor final da expressão. Por exemplo, a soma de dois inteiros, de 1 e 4 bytes, 
respectivamente, pode ser feita convertendo-se o operando de 1 byte para uma representação de 
4 bytes. O resultado produzido é um inteiro de 4 bytes. Já para uma operação aritmética entre 
um inteiro e um real, os dois operandos devem estar representados como reais, assim como o 
resultado da operação. 
TIPOS DE DADOS DE CALENDÁRIO 
Normalmente, registros de tempo são representados como um determinado instante numa certa 
escala. Essa escala pode ser mais ou menos precisa, de acordo com o espaço de armazenagem 
disponível. 
Vamos supor que seja necessário registrar o instante 05/03/2007 14:12:00. Vamos também 
supor que o instante de referência seja 01/01/1900 00:00:00 e que a precisão seja de minutos. 
Neste caso, bastaria armazenar o número de minutos decorridos entre o instante de referência e 
o instante sendo registrado. Esse número seria 56368212! Ou seja, há 56368212 minutos entre 
a zero hora do dia 01/01/1900 e as quatorze horas e doze minutos do dia 05/03/2007. O mesmo 
raciocínio seria aplicado aosinstantes anteriores ao de referência: o instante 31/12/1899 
23:59:00 seria representado como –1. O gráfico abaixo ilustra uma escala de tempo. 
 
 Representação 
interna 
 Tempo 
 56368274 − 05/03/2007 15:14:00 
 56368273 − 05/03/2007 15:13:00 
T1 56368272 − 05/03/2007 15:12:00 
 56368271 − 05/03/2007 15:11:00 
 ... − ... 
 ... ... ... 
 ... − ... 
 2 − 01/01/1900 00:02:00 
 1 − 01/01/1900 00:01:00 
T0 0  01/01/1900 00:00:00 
 -1 − 31/12/1899 23:59:00 
 -2 − 31/12/1899 23:58:00 
 ... − ... 
 ... ... ... 
 
Se a precisão fosse de dias, seriam 39144 unidades entre 01/01/1900 e 05/03/2007. Observamos 
que, dependendo da precisão requerida, o tamanho em bytes do número que representa a 
diferença pode ser maior ou menor. No caso de minutos, seriam necessários pelo menos 26 bits; 
com precisão de dias, 17 bits fariam o serviço. 
4 Capítulo 7: Conhecendo os tipos de dados 
 
O espaço de memória necessário para armazenar um instante de tempo (seja data, horário ou a 
combinação de ambos) depende: da precisão requerida e da amplitude que se deseja cobrir. 
Note que se fôssemos armazenar o instante 31/12/5015 13:24:00, com precisão de milisegundos, 
teríamos grande precisão (milisegundos) e grande amplitude (mais de 5.000 anos!). 
Aplicações de bancos de dados, na maior parte das vezes, não requerem muita amplitude e 
precisão. Datas de nascimento e datas de transações comerciais, por exemplo, estão 
adequadamente cobertas com amplitudes próximas de 200 anos, para o passado e para o futuro, 
com precisão de dias. Alguns registros de tempo, entretanto, podem requerer maior precisão, 
tais como os atributos que registram o exato momento em que as transações foram efetuadas, 
onde uma precisão de segundos, ou até de milisegundos, pode ser necessária. De qualquer 
forma, há vários graus de precisão e amplitude nas implementações que permitem uma escolha 
bastante adequada. 
Os tipos que registram tempo devem permitir alguma forma de aritmética sobre seus valores. 
Calcular as datas de uma prestação mensal a partir de uma data base, somando-se um mês a 
cada passo, ou calcular o número de dias decorridos entre duas datas ou, ainda, calcular o núme-
ro de minutos entre dois registros de tempo são exemplos de operações usuais sobre esses tipos 
que devem estar disponíveis ao programador SQL. Além disso, tipos que armazenam registros 
de tempo são inerentemente estruturados: ano, mês, dia, hora, etc, são componentes naturais da 
nossa concepção de tempo e a capacidade de isolar e manipular esses componentes é um 
requisito primordial. 
TIPOS DE DADOS STRINGS 
São tipos de dados que armazenam coleções de caracteres. Caracteres representam símbolos 
gráficos, ou de controle, e têm uma estrutura uniforme, dependendo do conjunto com o qual se 
trabalhe. Existem dezenas de diferentes padrões de caracteres, tais como ASCII, EBCDIC, Unicode 
(Padrão de Caracteres da ISSO - International Standards Organization), etc. De acordo com o padrão, 
o número de bytes necessários para representar um caracter pode variar. Há conjuntos 
monobyte, como o código ASCII, e conjuntos multibyte, como alguns alfabetos asiáticos. Os 
conjuntos podem ser diferenciados entre si: um mesmo código pode representar diferentes 
caracteres gráficos em diferentes conjuntos. Isso ocorre, principalmente, com conjuntos de 
caráter nacional: o conjunto padrão (ou padrão nacional) utilizado na Grécia é bem diferente do 
conjunto padrão utilizado no Brasil! 
Muitos dos conjuntos de caracteres utilizados estão limitados ao máximo de 256 caracteres, uma 
vez que dispõem de somente 8 bits para representar cada caracter. Com a explosão da utilização 
dos computadores e com a sofisticação dos equipamentos como impressoras e monitores, 
muitos outros caracteres passaram a ser utilizados, tais como símbolos matemáticos, letras 
gregas, setas e outros grafismos que demandam uma expansão nos conjuntos de caracteres. O 
conjunto Unicode visa a solucionar este problema. Com códigos de 16 bits, ou 2 bytes, o 
número de possibilidades passa para 65.536 caracteres, o que é suficiente para acomodar quase 
todos os conjunto existentes. 
Outro aspecto é o tamanho do código de cada caracter no âmbito do padrão. É possível que se 
tenham caracteres com códigos de comprimento diferente. Assim, as letras mais comumente 
usadas podem ter códigos mais curtos, enquanto os caracteres mais raros podem ocupar mais 
espaço. Este é um princípio bastante empregado em algoritmos de compactação de dados. 
Alguns implementações, como Oracle, são capazes de manipular conjuntos de caracteres com 
códigos de tamanho variável. 
As implementações SQL são capazes de identificar os conjuntos de caracteres em uso e 
manipulá-los adequadamente. Note que a busca de um padrão num conjunto de caracteres de 1 
byte é diferente da busca de um padrão num conjunto multibyte. Essas diferenças devem ser 
transparentes para o programador SQL e resolvidas pela implementação, automaticamente. 
Error! Style not defined. 5 
 
As operações usuais sobre strings são bastante simples, resumindo-se à concatenação, 
desmembramento em substrings e busca de substrings. Entretanto, uma característica 
importante é a capacidade de armazenar valores com comprimentos variáveis. Nomes de 
pessoas e empresas, títulos de livros e endereços são exemplos em que as diferenças de tamanho 
de um valor para outro podem ser consideráveis. A capacidade de manipular campos variáveis 
torna-se, assim, um importante fator de diferenciação dos tipos string. 
TIPOS DE DADOS BINÁRIOS 
São tipos de dados não estruturados. Embora normalmente sejam tratados genericamente como 
caracteres, na verdade dados binários não têm necessariamente esta característica. Uma figura, 
por exemplo, é um mapa de bits que não configuram caracteres específicos. Normalmente, 
dados binários são tratados como um todo, pois não há uma estrutura prevalecente. 
TIPOS DE DADOS ESPECÍFICOS 
Cada implementação possui peculiaridades próprias e essas peculiaridades podem se manifestar 
através da existência de tipos específicos, exclusivos. Esses tipos de dados serão tratados 
separadamente. 
TIPOS DE DADOS DERIVADOS 
A redigir ???. 
TIPOS DE DADOS NO ACCESS, MYSQL, ORACLE E SQL SERVER 
As seções seguintes deste capítulo apresentam, de forma completa, os tipos de dados 
disponíveis em cada uma das quatro implementações SQL consideradas neste livro. Os tipos 
são identificados pelo nome principal, juntamente com seus sinônimos. Isto é útil porque, 
conhecendo-se os tipos e os sinônimos válidos em cada implementação, fica mais fácil produzir 
scripts SQL que sejam portáteis. 
Cada tipo é detalhado com relação à gama de valores que suporta e ao espaço requerido para 
armazenagem. 
7.2 TIPOS DE DADOS NO ACCESS 
QUADRO RESUMO DOS TIPOS DE DADOS NO ACCESS 
 Tipo Sinônimos 
Lógicos BIT LOGICAL, LOGICAL1, YESNO 
BYTE INTEGER1 
SHORT INTEGER2, SMALLINT 
LONG INT, INTEGER, INTEGER4 
SINGLE FLOAT4, IEEESINGLE, REAL 
DOUBLE FLOAT, FLOAT8, IEEEDOUBLE, NUMBER, NUMERIC 
 
 
Numéricos 
CURRENCY MONEY 
Tempo DATETIME DATE, TIME, TIMESTAMP 
6 Capítulo 7: Conhecendo os tipos de dados 
 
TEXT ALPHANUMERIC, CHAR, CHARACTER, STRING, VARCHAR String 
LONGTEXT LONGCHAR, MEMO, NOTE 
BINARY VARBINARY Binários 
LONGBINARY GENERAL, OLEOBJECT 
GUID Específicos 
COUNTER AUTOINCREMENT 
 
TIPOS LÓGICOS NO ACCESS 
Access implementa o tipo BIT, definido expressamente como um tipo lógico, isto é, que pode 
assumir os valores true e false, além do valor nulo. Se T é uma tabela onde a é um atributo 
definido com o tipo BIT (ou LOGICAL, LOGICAL1, YESNO), é possível escrever uma consulta como 
select * 
from T 
where a 
uma vez que um atributo de um tipo lógico pode fazer o papel de uma expressão lógica. Esta 
consulta seria equivalente a 
select * 
from T 
where a = true 
Atenção, porém, porque esta construção também é válida para atributos de outros tipos, que não 
lógicos.Uma consulta como 
select * 
from inscricao 
where nota 
produz como resultado 
 
matricula coddisciplina nota 
1001 317 8,0 
1002 210 9,5 
1005 316 3,0 
1005 117 4,2 
1007 114 7,0 
1010 317 5,5 
1010 316 10,0 
 
Os registros com notas nulas não aparecem no resultado, assim como não apareceriam registros 
com notas iguais a zero. Isto ocorre porque são considerados verdadeiros os valores diferentes 
de zero (notas negativas teriam aparecido). 
Mesmo uma consulta como 
select * 
from aluno 
where nome 
seria possível! Compõem o resultado todos os registros em que o atributo nome não é nulo. O 
mesmo raciocínio aplica-se a campos com tipos de calendário. 
∴ 
Error! Style not defined. 7 
 
As duas consultas a seguir mostram como um valor lógico é apresentado no resultado de uma 
consulta. 
Na primeira consulta, a segunda coluna contém o resultado da expressão nota > 5, cujo valor 
pode ser verdadeiro, falso ou nulo, representados, respectivamente, com –1, 0 e null. Na 
segunda consulta, equivalente à primeira, a segunda coluna inclui no resultado, expressamente, 
os literais true, false e null, de acordo com o resultado da expressão lógica. 
TIPOS DE CALENDÁRIO NO ACCESS 
Os valores de tempo são armazenados sob o tipo datetime, que consiste num número real de 8 
bytes, com precisão de minutos. O instante de referência é zero hora do dia 30/12/1899. A 
amplitude engloba datas do ano 0008 até o ano 9999. A parte inteira do número representa o 
número (positivo ou negativo) de dias decorridos da data do instante de referência. A parte 
decimal do número representa a fração do dia correspondente ao horário sendo armazenado. 
O instante que correspondente às 12 horas do dia 01/01/1900 é representado pelo número 2,5. 
A parte inteira, 2, é o número de dias decorridos desde 30/12/1899. A parte decimal, 0,5, 
corresponde ao horário do meio-dia, que é exatamente a metade de um dia. Outro exemplo: 
36891,75 é o número que corresponde às 18 horas do dia 31/12/2000. 
O Access permite operações aritméticas sobre operandos do tipo de registro de tempo. Como 
uma data é sempre armazenada como um número, pode-se somar ou subtrair valores, que são 
transformados em unidades de tempo. Por exemplo, somando-se 1 a um registro de tempo 
obtém-se o registro de tempo, com o mesmo horário, do dia seguinte. Somando-se 1/24 a um 
registro de tempo obtém-se o registro de tempo de uma hora depois. Embora este seja um 
recurso útil por vezes, a manipulação de datas é mais segura com as funções apropriadas para 
este fim, apresentadas no capítulo 8. A consulta a seguir produz a lista de alunos juntamente 
com suas datas de nascimento e a data em que completam 10.000 dias de vida. 
nota 'maior que cinco?' 
NULL NULL 
8,00 -1 
9,50 -1 
3,00 0 
4,20 0 
NULL NULL 
7,00 -1 
5,50 -1 
10,00 -1 
select nota, 
 nota > 5 as 'maior que cinco?' 
from inscricao
select nota, 
 iif(nota > 5, true, iif(nota <= 5, false, null)) as 'maior que cinco?' 
from inscricao 
nome nascimento dia10000 
Ricardo Biondi 21/02/80 09/07/07 
Maria Rita Colatti 10/11/78 28/03/06 
Oscarito Vianna 14/08/79 30/12/06 
Barbara Carlito 29/10/79 16/03/07 
Carlos Maradona 30/06/77 15/11/04 
Sacadura Miranda 12/12/81 29/04/09 
Maria Lucia Silva 10/08/75 26/12/02 
select nome, 
 nascimento, 
 nascimento +10000 as dia10000 
from aluno 
8 Capítulo 7: Conhecendo os tipos de dados 
 
A próxima consulta é mostrada a título de curiosidade, uma vez que sua utilidade beira o zero 
absoluto. Sendo a data de nascimento armazenada como um número, é possível imaginar algo 
como 
Uma distante, mas possível, utilidade para essa construção é a geração de números aleatórios, 
vistos no capítulo 8. 
TIPOS NUMÉRICOS NO ACCESS 
Os tipos numéricos no Access cobrem inteiros BYTE, SHORT, LONG, de 1, 2 e 4 bytes e números de 
ponto flutuante, SINGLE, DOUBLE, de 4 e 8 bytes, respectivamente. O tipo CURRENCY (ou MONEY), é 
um exemplo aproximado de número decimal, porque é definido com 4 casas decimais, mas o 
Access não permite que o número total de dígitos seja definido: são sempre 19 dígitos. Na 
verdade, este tipo é armazenado como um inteiro escalado, pois tem a mesma gama de valores 
do tipo LONG, consideradas as decimais em todas as operações em que aparece como operando. 
TIPOS STRING NO ACCESS 
Os tipos string armazenam caracteres ASCII, com um byte por caracter. Há dois tipos, sendo 
um para strings curtas, até 255 caracteres e outro, para strings muito longas, com até 1,2 Gbytes. 
TIPOS BINÁRIOS NO ACCESS 
Quanto aos tipos binários, há dois tipos, sendo um variável, com até 255 bytes e outro longo, 
adequado para armazenar figuras, documentos do Office, mapas de bits, sons e outros valores 
não organizados como caracteres. 
TIPOS ESPECÍFICOS NO ACCESS 
Os tipos específicos COUNTER e GUID permitem a geração de códigos identificadores de registros. 
COUNTER é um número seqüencial, armazenado como um inteiro LONG, que não se repete na 
tabela onde foi utilizado. Já o tipo GUID, conhecido também como Código de Replicação, 
garante códigos de 16 bytes que não se repetem em outros registros. 
RELAÇÃO COMPLETA DOS TIPOS DE DADOS NO ACCESS 
ALPHANUMERIC 
O mesmo que TEXT. 
AUTOINCREMENT 
O mesmo que COUNTER. 
nascimento produto 
21/02/80 856849984 
10/11/78 829670416 
14/08/79 845704561 
29/10/79 850130649 
15/07/79 843960601 
12/12/81 895924624 
10/08/75 762643456 
select nascimento, 
 nascimento * nascimento as produto 
from aluno 
 
Error! Style not defined. 9 
 
BINARY(t) 
Dados binários de formato livre, de comprimento variável n, 0 ≤ n ≤ t ≤ 255. 
Tamanho: 1 + n bytes 
Sinônimos: VARBINARY 
BIT 
Valores lógicos, verdadeiro e falso, armazenados como os números –1 e 0, respectivamente. 
Tamanho: 1 byte 
Sinônimos: LOGICAL, LOGICAL1, YESNO 
BYTE 
Números inteiros, sem sinal, entre 0 e 255. 
Tamanho: 1 byte 
Sinônimos: INTEGER1 
CHAR 
O mesmo que TEXT. 
CHARACTER 
O mesmo que TEXT. 
CURRENCY 
Números entre –922.337.203.685.477,5808 e 922.337.203.685.477,5807, com 4 casas decimais 
fixas. Valores com mais de 4 casas decimais são truncados na quinta decimal. 
Tamanho: 8 bytes 
Sinônimos: MONEY 
COUNTER 
Números utilizados em colunas com auto-incremento, armazenados como LONG. 
Tamanho: 4 bytes 
Sinônimos: AUTOINCREMENT 
DATETIME 
Registros de tempo entre os anos 0008 e 9999, com precisão de minutos. 
Tamanho: 8 bytes 
Sinônimos: DATE, TIME, TIMESTAMP 
DATE 
O mesmo que DATETIME. 
DOUBLE 
Um valor de ponto flutuante de dupla precisão com um intervalo de – 1,79769313486232 × 
10308 a – 4,94065645841247 × 10-324 para valores negativos, 4,94065645841247 × 10-324 a 
1,79769313486232 × 10308 para valores positivos e 0. 
Tamanho: 8 bytes 
Sinônimos: FLOAT, FLOAT8, IEEEDOUBLE, NUMBER, NUMERIC 
FLOAT 
O mesmo que DOUBLE. 
FLOAT4 
O mesmo que SINGLE. 
FLOAT8 
O mesmo que DOUBLE. 
GENERAL 
O mesmo que LONGBINARY. 
GUID 
Um número de identificação exclusivo utilizado com chamadas de procedimento remoto. 
Também conhecido por código de replicação, garante um identificador que não se repete em 
outros registros. 
Tamanho: 16 bytes 
Sinônimos: nenhum 
10 Capítulo 7: Conhecendo os tipos de dados 
 
IEEESINGLE 
O mesmo que SINGLE. 
IEEEDOUBLE 
O mesmo que DOUBLE. 
INT 
O mesmo que LONG. 
INTEGER 
O mesmo que LONG. 
INTEGER1 
O mesmo que BYTE. 
INTEGER2 
O mesmo que SHORT. 
INTEGER4 
O mesmo que LONG. 
LOGICAL 
O mesmo que BIT. 
LOGICAL1 
O mesmo que BIT. 
LONG 
Números inteiros, com sinal, entre – 2.147.483.648 e 2.147.483.647. 
Tamanho: 4 bytes 
Sinônimos: INT, INTEGER, INTEGER4 
LONGBINARY 
Formato livre, de zero até 1,2 Gbytes. 
Tamanho: variável, dependendo do tamanho do atributo 
Sinônimos: GENERAL, OLEOBJECT 
LONGCHAR 
O mesmo que LONGTEXT. 
LONGTEXT 
Strings de caracteres, de comprimento variável n, 0 ≤ n ≤ t ≤ 1,2 Gbytes. 
Tamanho: 4 + n bytes 
Sinônimos: LONGCHAR, MEMO, NOTE 
MEMO 
O mesmo que LONGTEXT. 
NOTE 
O mesmo que LONGTEXT. 
NUMBER 
O mesmo que DOUBLE. 
NUMERICO mesmo que DOUBLE. 
OLEOBJECT 
O mesmo que LONGBINARY. 
REAL 
O mesmo que SINGLE. 
SHORT 
Números inteiros, com sinal, entre – 32.768 e 32.767. 
Tamanho: 2 bytes 
Sinônimos: INTEGER2, SMALLINT 
SINGLE 
Error! Style not defined. 11 
 
Números reais com precisão simples entre -3,402823 × 1038 e – 1,401298 × 10-45 para valores 
negativos; -1,401298 × 10-45 e 3,402823 × 1038 para valores positivos. 
Tamanho: 4 bytes 
Sinônimos: FLOAT4, IEEESINGLE, REAL 
SMALLINT 
O mesmo que SHORT. 
STRINGT 
O mesmo que TEXT. 
TEXT(t) 
Strings de caracteres, de comprimento variável n, 0 ≤ n ≤ t ≤ 255. 
Tamanho: 1 + n bytes 
Sinônimos: ALPHANUMERIC, CHAR, CHARACTER, STRING, VARCHAR 
TEXT 
O mesmo que TEXT(255). 
TIME 
O mesmo que DATETIME. 
TIMESTAMP 
O mesmo que DATETIME. 
VARBINARY 
O mesmo que BINARY. 
VARCHAR 
O mesmo que TEXT. 
YESNO 
O mesmo que BIT. 
 
7.3 TIPOS DE DADOS NO MYSQL 
 QUADRO RESUMO DOS TIPOS DE DADOS NO MYSQL 
 Tipo Sinônimos 
TINYINT BIT, BOOL 
SMALLINT 
MEDIUMINT 
INT INTEGER 
BIGINT 
FLOAT 
DOUBLE DOUBLE PRECISION, REAL 
 
 
 
Numéricos 
DECIMAL DEC, NUMERIC 
DATE 
DATETIME 
TIMESTAMP 
TIME 
 
Tempo 
YEAR 
CHAR NATIONAL CHAR, NCHAR 
 CHAR BINARY NATIONAL CHAR BINARY, NCHAR BINARY, CHAR BYTE 
12 Capítulo 7: Conhecendo os tipos de dados 
 
VARCHAR NATIONAL VARCHAR, VARCHARACTER 
TEXT 
TINYTEXT 
MEDIUMTEXT 
 
String 
LONGTEXT 
TINYBLOB 
BLOB 
MEDIUMBLOB 
 
Binários 
LONGBLOB 
ENUM Específicos 
SET 
 
TIPOS LÓGICOS NO MYSQL 
No MySQL não há um tipo de dados que expressamente armazene os valores lógicos 
verdadeiro e falso. Entretanto, os mesmos efeitos podem ser facilmente simulados. As duas 
consultas a seguir ilustram claramente este aspecto. A primeira delas produz como resultado a 
lista de notas da tabela Inscrição e o valor lógico resultante da expressão lógica 
nota > 5 
A segunda consulta produz exatamente o mesmo resultado, porém obtido a partir do uso 
explícito dos literais true e false na sua lista alvo. Nos dois casos, observa-se que o valor 
verdadeiro ( ou true) é 1 e o valor falso (ou false) é 0. Com isso, pode-se inferir corretamente 
que qualquer valor numérico, diferente de zero, vale como o valor verdadeiro numa expressão 
lógica e que qualquer valor igual a zero vale como falso. 
 
 
 
 
 
 
 
 
 
 
 
 
 
O efeito disso é que uma consulta como 
select * 
from inscricao 
where nota 
nota 'maior que cinco?' 
NULL NULL 
8,00 1 
9,50 1 
3,00 0 
4,20 0 
NULL NULL 
7,00 1 
5,50 1 
10,00 1 
select nota, 
 nota > 5 as 'maior que cinco?' 
from inscricao 
select nota, 
 if(nota > 5, true, if(nota <= 5, false, null)) as 'maior que cinco?' 
from inscricao 
Error! Style not defined. 13 
 
produz uma lista com todos os registros de INSCRIÇÃO que não possuem notas nulas, como 
havíamos constatado no Access. Isto não significa que uma consulta como 
select * 
from inscricao 
where nota = true 
seja equivalente. O teste de igualdade acima é sempre e o resultado, vazio. Mas, o que 
acontece se usarmos valores do tipo string nesta situação? Diferentemente do que acontece no 
Access, a consulta 
select * 
from aluno 
where nome 
produz um resultado vazio (no Access aparecem todos os alunos para esta consulta!). Note que 
a conversão do nome para um tipo numérico retorna zero, como veremos no capítulo 8. Por 
fim, a consulta 
select * 
from aluno 
where nascimento 
retorna todos os alunos que não têm a data de nascimento nula. 
Em suma, qualquer expressão, numérica ou não, pode ser utilizada no papel de uma expressão 
lógica. Se o seu valor, convertido para um tipo numérico, for diferente de zero, a expressão é 
verdadeira; caso contrário, é falsa. Expressões numéricas no papel de expressões lógicas 
podem ser combinadas pelos operadores lógicos, o que permite uma consulta como 
select * 
from aluno 
where 0 or 1 
TIPOS NUMÉRICOS NO MYSQL 
O MySQL oferece quatro tipos de inteiros, com 1, 2, 3, 4 e 8 bytes (TINYINT, SMALLINT, MEDIUMINT, 
INT, BIGINT). Todos podem ser declarados com signed ou unsigned (com ou sem sinal). Os 
números reais de ponto flutuante podem ter precisão simples ou dupla (FLOAT e DOUBLE), e 
também ser definidos com signed ou unsigned. Neste caso, a gama de valores não é alterada, 
nem o modo de armazenagem: simplesmente, no caso de unsigned, os valores negativos são 
desabilitados. 
O tipo DECIMAL permite a armazenagem de números reais de ponto fixo. Na declaração, são 
determinados o número total de dígitos e o número de casas decimais. Esses números são 
armazenados como strings mas, como devem ser convertidos para números reais para ser 
operados, têm sua gama de valores restrita à gama dos números reais de dupla precisão. 
TIPOS STRING NO MYSQL 
MySQL oferece duas opções básicas de tipos string: com tamanho fixo ou variável. O tipo CHAR 
define strings de tamanho fixo com até 255 caracteres. Se uma string menor que o tamanho é 
armazenada, a mesma é completada com caracteres espaço, no final. Quando recuperada, os 
brancos no final são todos retirados. O tipo VARCHAR define strings de tamanho variável, 
limitadas em 255 caracteres. Espaços em branco ao final da string são removidos quando esta é 
armazenada. Tanto os tipo CHAR e VARCHAR podem ser acompanhados das palavras-chave BINARY 
e NATIONAL. A primeira significa que as strings devem ser ordenadas com sensibilidade de 
maiúsculas e minúsculas. A segunda palavra-chave determina que o conjunto de caracteres 
usado para as strings deve ser o padrão nacional. Isto já é default no MySQL, que usa o padrão 
ISO-8859-1 (Latin1) como conjunto padrão. O conjunto padrão pode ser alterado pela opção –-
14 Capítulo 7: Conhecendo os tipos de dados 
 
8859-1 (Latin1) como conjunto padrão. O conjunto padrão pode ser alterado pela opção –-
default-character-set. O MySQL permite que, através de seus arquivos de configuração, novos 
conjuntos de caracteres sejam definidos e utilizados pelo servidor. 
Outros quatro tipos de tamanho variável são disponíveis no MySQL: TEXT, TINYTEXT, MEDIUMTEXT 
e LONGTEXT. A diferença entre eles está no tamanho máximo admitido em cada caso, 
respectivamente 65.535, 255, 16.777.215 e 4.294.967.295 caracteres. De fato, os tipos *TEXT e 
*BLOB são bastante semelhantes, exceto pelo critério de ordenação: sensível a maiúsculas e 
minúsculas para *BLOB e insensível para *TEXT. 
MySQL, por sua conta, altera os tipos de uma tabela observando que 
• tipos VARCHAR com tamanho menor que 4 caracteres são criados como CHAR; 
• se há um tipo de tamanho variável em alguma coluna, todo registro passa a ter tamanho 
variável e todos os tipos CHAR com mais de 3 caracteres são criados como VARCHAR. 
 
Atributos do tipo *TEXT podem ser referenciados nas cláusulas order by e group by. Contudo, 
são considerados apenas os primeiros bytes do campo. A variável max_sort_lenght determina 
quantos bytes são usados. O default é 1.024, mas pode ser alterado com a opção -O. 
TIPOS DE CALENDÁRIO NO MYSQL 
MySQL trabalha com cinco tipos de dados para registro de tempo. O tipo date tem precisão de 
dias, e portanto representa datas redondas, com uma amplitude de quase 9.000 anos, de 
01/01/1000 00:00:00 até 31/12/9999 00:00:00. O tipo datetime é o mais preciso e de maior 
amplitude, suportando tempos entre 01/01/1000 00:00:00 até 31/12/9999 23:59:59, com 
precisão de segundos. O tipo timestamp oferece a mesma precisão, de segundos, numa 
amplitude menor, e registra tempos desde 01/01/1970 00:00:00 até o ano de 2037. O tipo time 
serve para registrar intervalos de tempo em horas, minutos e segundos e suporta uma escala 
relativa entre -838:59:59 e +838:59:59. Usualmente, este tipo é usado como um cronômetro, 
pois não é automaticamente conversível para dias. O quinto e último tipo, year, serve para a 
armazenagem de anos, com dois ou quatro dígitos. Com dois dígitos, representa os anos entre 
1970 e 2069. Com quatro dígitos, registraanos entre 1901 e 2155. 
O programador deve ser cuidadoso com as datas no MySQL porque não há um teste sobre sua 
validade. Embora o ano deva estar entre 1000 e 9999, o mês entre 0 e 12 e o dia entre 0 e 31, é 
possível registrar algo como 31/11/2010! Também é possível registrar 00/11/1980 ou 
10/00/1960. Este último caso pode ser usado como um recurso, por exemplo, quando se tem 
dados incompletos sobre alguma data, embora a aritmética de datas não funcione corretamente 
sobre esses valores. 
Quando o valor nulo é atribuído a uma coluna do tipo TIMESTAMP, na verdade o MySQL 
armazena a data e hora correntes para aquele valor. Por este motivo, é irrelevante permitir ou 
não valores nulos para uma coluna deste tipo. Vide capítulo 11. 
Os tipos de calendário permitem operações aritméticas sobre seus valores, embora com 
resultados por vezes imprevisíveis! A consulta abaixo ilustra este aspecto. 
 
 
 
 
 
 
Error! Style not defined. 15 
 
Além do nome de cada aluno, a consulta produz mais cinco colunas. A primeira mostra a data 
de nascimento. Na segunda, aparece o número que corresponde à data de nascimento do aluno. 
Note que somando 0 a uma data força a conversão de tipo, de registro de tempo para inteiro. É 
possível observar que o número contém exatamente ano/mês/dia, nesta ordem. Este é o 
problema, ilustrado na terceira coluna: somado-se 10.000 à data de nascimento, tem-se um 
número que não corresponde à data de dez mil dias depois, como tínhamos no Access. Note 
que para a data 30/06/1977 o número é 19770630 (terceira coluna) que somado a 10.000 resulta 
em 19780630 na quarta coluna. A conversão deste último para data, através da função cast, 
retorna 30/06/78 na quinta coluna. Ou seja, um ano depois e não 10.000 dias como queríamos. 
Um ano depois porque somamos uma unidade na quinta casa decimal à esquerda, que 
corresponde exatamente ao ano no citado número! A sexta coluna mostra a data correta, obtida 
através da função date_add, que corresponde a 10.000 dias após o nascimento de cada aluno. 
As funções cast e date_add são explicadas em detalhes no capítulo 8. 
Outro caso interessante é mostrado a seguir. 
Neste exemplo, aparecem as datas dos dias seguintes, obtidos somando-se 1 à data de 
nascimento de cada aluno. Note que, somando-se apenas 1 o resultado está aparentemente 
correto. Mas há um problema: na quinta linha, aparece a data 31/06/77, que é inválida. 
Embora seja um recurso bastante comum entre programadores SQL, a aritmética de datas nem 
sempre funciona corretamente no MySQL. Todas as operações com datas devem 
preferencialmente ser efetuadas através das funções de calendário, apresentadas no capítulo 8. 
TIPOS BINÁRIOS NO MYSQL 
Há quatro tipos binários no MySQL: BLOB, TINYBLOB, MEDIUMBLOB e LONGBLOB. A diferença está no 
tamanho máximo admitido em cada caso, respectivamente 65.535, 255, 16.777.215 e 
nome nascimento nascimento_n dia10000_n dia10000_d dia10000_OK 
Ricardo Biondi 21/02/80 19800221 19810221 21/02/81 09/07/07 
Maria Rita Colatti 10/11/78 19791110 19791110 10/11/79 28/03/06 
Oscarito Vianna 14/08/79 19790814 19800814 14/08/80 30/12/06 
Barbara Carlito 29/10/79 19791029 19800129 29/10/80 16/03/07 
Carlos Maradona 30/06/77 19770630 19780630 30/06/78 15/11/04 
Sacadura Miranda 12/12/81 19811212 19821212 12/12/82 29/04/09 
Maria Lucia Silva 10/08/75 19750810 19760810 10/08/76 26/12/02 
select nome, 
 nascimento as nascimento_d, 
 nascimento+0 as nascimeto_n, 
 nascimento +10000 as dia10000_n, 
 cast(nascimento+1000 as date) as dia10000_d, 
 date_add(nascimento, INTERVAL 10000 DAY) as dia10000_OK 
from aluno 
nascimento dia_seguinte 
21/02/80 22/02/80 
10/11/78 11/11/78 
14/08/79 15/08/79 
29/10/79 30/10/79 
30/06/77 31/06/77 
12/12/81 13/12/81 
10/08/75 11/08/75 
select nascimento, 
 cast(nascimento+1 as date) as dia_seguinte 
from aluno 
16 Capítulo 7: Conhecendo os tipos de dados 
 
4.294.967.295 caracteres. Tipos *BLOB e *TEXT são bastante semelhantes, exceto pelo critério de 
ordenação: sensível a maiúsculas e minúsculas para *BLOB e insensível para *TEXT. 
A exemplo dos tipos *TEXT, atributos dos tipos *BLOB também podem ser referenciados nas 
cláusulas order by e group by. Contudo, são considerados os primeiros bytes do campo apenas. 
A variável max_sort_lenght é determina quantos bytes são usados. O default é 1024, mas 
pode ser alterado com a opção -O. 
TIPOS ESPECÍFICOS NO MYSQL 
O tipo ENUM permite estabelecer os possíveis valores de strings para uma coluna. Esses valores 
podem ser referenciados por seus valores literais ou pela posição relativa de cada um. Por 
exemplo, se uma coluna definida como 
ENUM (‘amarelo’, ‘verde’, ‘azul’) 
Somente algum desses valores, além do valor nulo e da string vazia podem armazenados nesta 
coluna. A ordem em que são enumerados os valores define também o critério de ordenação da 
coluna. No caso acima, os registros com o valor ‘verde’ apareceriam antes daqueles que têm 
‘azul’. Um atributo do tipo ENUM referenciado num contexto numérico toma o valor de sua 
posição na lista que o define (contado a partir de 1). Assim, se o valor de x é ‘verde’ a 
expressão x+0 tem valor 2. Um tipo enumerado pode ter até 65535 elementos. Um tipo 
enumerado requer o espaço de armazenagem de um ou dois bytes dependendo do número de 
elementos. ∴ 
O tipo SET é uma string especial que pode conter uma combinação de um ou mais valores de 
uma lista que é fornecida por ocasião da criação da tabela. Uma coluna criada com o tipo 
SET ('amarelo', 'verde', 'azul') 
Pode conter os valores 
'amarelo' 
'amarelo', 'verde' 
 'amarelo', 'azul' 
 'verde' 
 'verde', 'azul' 
 'azul' 
 'amarelo', 'verde', 'azul' 
além do valor nulo e da string vazia. Pode haver até 64 diferentes valores. Cada elemento, a 
partir da esquerda da lista, corresponde a um número que é uma potência de 2 de acordo com a 
posição do elemento. Assim, o valor “amarelo” corresponde a 1; “verde” corresponde a 2 e 
“azul” corresponde a 4. Um conjunto com os valores “verde” e “azul” corresponderia ao valor 
6 e o conjunto com os três elementos teria valor 7. Um atributo do tipo set pode ser manipulado 
como um número ou como uma string. Veja a função find_in_set no capítulo 8. 
RELAÇÃO COMPLETA DOS TIPOS DE DADOS NO MYSQL 
BIGINT 
Números inteiros: entre –9.223.372.036.854.775.808 e 9.223.372.036.854.775.807, se declarado 
como signed; entre 0 e 18.446.744.073.709.551.615, se declarado como unsigned. 
Tamanho: 8 bytes 
Sinônimos: nenhum 
BIT 
O mesmo que TINYINT. 
BLOB 
Formato livre, com até 65.535 caracteres; ordenado com sensibilidade para maiúsculas e 
minúsculas. 
Error! Style not defined. 17 
 
Tamanho: comprimento do campo + 2 bytes 
Sinônimos: nenhum 
BOOL 
O mesmo que TINYINT. 
CHAR (t) 
String de caracteres, de tamanho fixo t, 0 ≤ t ≤ 255; quando armazenada, preenchida com 
espaços à direita até completar o tamanho; quando recuperada, espaços à direita são removidos; 
CHAR(0) é permitido, porém os únicos valores permitidos são null e a string de zero caracteres. 
Tamanho: 1 + t bytes 
Sinônimos: NATIONAL CHAR (t) 
CHAR 
O mesmo que CHAR (1). 
CHAR (t) BINARY 
Semelhante a CHAR (t), porém com sensibilidade para maiúsculas e minúsculas na ordenação. 
Tamanho: 1 + t bytes 
Sinônimos: NATIONAL CHAR (t) BINARY 
CHAR (t) BYTE 
O mesmo que CHAR (t) BINARY. 
DATE 
Registros de tempo, entre 01/01/1000 e 31/12/9999, com precisão de dias (datas apenas). 
Tamanho: 3 bytes 
Sinônimos: nenhum 
DATETIME 
Registros de tempo, entre 01/01/1000 00:00:00 e 31/12/9999 23:59:59, com precisão de 
segundos. 
Tamanho: 8 bytes 
Sinônimos: nenhum 
DEC (p, s) 
O mesmo que DECIMAL (p, s). 
DECIMAL (p, s) 
Números armazenados como strings de dígitos, com ou sem sinal dependendo se declarados 
como signed ou unsigned, limitados aos valores máximos do tipo DOUBLE; p é o tamanho total 
do número; s é o número de casas decimais. Para números negativos, o sinal conta como um 
dígito.Tamanho: p +2 bytes se s > 0; p +1 bytes se s = 0; s +2 bytes, se p < s 
Sinônimos: DEC (p, s), NUMERIC (p, s) 
DOUBLE 
Números reais, com precisão dupla, entre –1,7976931348623157 × 10308 e -
2,2250738585072014 × 10-308, 0 e entre 2,2250738585072014 × 10-308 e 1,7976931348623157 × 
10308, se declarado como signed; se for declarado com unsigned, os valores negativos são 
desabilitados. 
Tamanho: 8 bytes 
Sinônimos: DOUBLE PRECISION, REAL 
DOUBLE PRECISION 
O mesmo que DOUBLE. 
ENUM (e1,...,en) 
Strings que podem assumir somente um dos até 65.535 valores enumerados, o valor nulo ou o 
valor de erro. 
Tamanho: 1 ou 2 bytes, dependendo do número de elementos 
Sinônimos: nenhum 
FLOAT 
18 Capítulo 7: Conhecendo os tipos de dados 
 
Números reais com precisão simples entre -3,402823466 × 1038 e -1,175494351 × 10-38, 0 e 
entre 1,175494351 × 10-38 e 3,402823466 × 1038, se declarado como signed; se for declarado 
como unsigned, os valores negativos são desabilitados. 
Tamanho: 4 bytes 
Sinônimos: DOUBLE PRECISION, REAL 
FLOAT (p [,s]) 
O mesmo que FLOAT se p ≤ 24; o mesmo que DOUBLE se 25 ≤ p ≤ 53. O argumento s indica o 
número de casas decimais. 
Tamanho: 4 ou 8 bytes, dependendo de p. 
Sinônimos: nenhum 
INT 
Números inteiros: entre –2.147.483.648 e 2.147.483.647, se declarado como signed; entre 0 e 
4.294.967.295, se declarado como unsigned. 
Tamanho: 4 bytes 
Sinônimos: INTEGER 
INTEGER 
O mesmo que INT. 
LONGBLOB 
Formato livre, com até 4.294.967.295 caracteres; ordenado com sensibilidade para maiúsculas e 
minúsculas. 
Tamanho: comprimento do campo + 4 bytes 
Sinônimos: nenhum 
LONGTEXT 
Dados de formato livre, com até 4.294.967.295 caracteres; ordenado sem sensibilidade para 
maiúsculas e minúsculas. 
Tamanho: comprimento do campo + 4 bytes 
Sinônimos: nenhum 
MEDIUMBLOB 
Formato livre, com até 16.777.215 caracteres; ordenado com sensibilidade para maiúsculas e 
minúsculas. 
Tamanho: comprimento do campo + 3 bytes 
Sinônimos: nenhum 
MEDIUMINT 
Números inteiros: entre –8.388.608 e 8.388.607, se declarado como signed; entre 0 e 
16.777.215, se declarado como unsigned. 
Tamanho: 3 bytes 
Sinônimos: nenhum 
MEDIUMTEXT 
Dados de formato livre, com até 16.777.215 caracteres; ordenado sem sensibilidade para 
maiúsculas e minúsculas. 
Tamanho: comprimento do campo + 3 bytes 
Sinônimos: nenhum 
NATIONAL CHAR (t) 
O mesmo que CHAR (t). 
NATIONAL CHAR (t) BINARY 
O mesmo que CHAR (t) BINARY. 
NUMERIC (p, s) 
O mesmo que DECIMAL (p, s). 
REAL 
O mesmo que DOUBLE. Se o MySQL estiver rodando sob a opção --ANSI ou com a opção --sql-
mode=REAL_AS_FLOAT, então REAL é o mesmo que FLOAT. 
SET (e1,...,en) 
Error! Style not defined. 19 
 
Strings que podem assumir qualquer combinação de um ou mais dos até 64 valores enumerados. 
Tamanho: de 1 a 8 bytes, dependendo do número de elementos 
Sinônimos: nenhum 
SMALLINT 
Números inteiros: entre –32.768 e 32.767, se declarado como signed; entre 0 e 65.535, se 
declarado como unsigned. 
Tamanho: 2 bytes 
Sinônimos: nenhum 
TEXT 
Dados de formato livre, com até 65.535 caracteres; ordenado sem sensibilidade para maiúsculas 
e minúsculas. 
Tamanho: comprimento do campo + 2 bytes 
Sinônimos: nenhum 
TIME 
Registros de tempo, compostos apenas de horas, minutos e segundos, entre -838:59:59 e 
838:59:59, com precisão de segundos. 
Tamanho: 3 bytes 
Sinônimos: nenhum 
TIMESTAMP (t) 
Registros de tempo, entre 01/01/1970 00:00:00 e o ano de 2037, com precisão de segundos. 
Este tipo pode ser declarado associado a um tamanho t (que pode ser 14, 12, 10, 8, 6, 4 ou 2) 
que refere-se somente ao formato de edição do dados quando da sua apresentação, não fazendo 
diferença quanto à forma de armazenagem. 
Tamanho: 4 bytes 
Sinônimos: nenhum 
TINYBLOB 
Formato livre, com até 255 caracteres; ordenado com sensibilidade para maiúsculas e 
minúsculas. 
Tamanho: comprimento do campo + 1 byte 
Sinônimos: nenhum 
TINYINT 
Números inteiros: entre -128 e 127, se declarado como signed; entre 0 e 255, se declarado como 
unsigned. 
Tamanho: 1 byte 
Sinônimos: BIT, BOOL 
TINYTEXT 
Dados de formato livre, com até 255 caracteres; ordenado sem sensibilidade para maiúsculas e 
minúsculas. 
Tamanho: comprimento do campo + 1 bytes 
Sinônimos: nenhum 
VARCHAR (t) 
Strings de caracteres, de tamanho variável até t, 0 ≤ t ≤ 255; quando armazenadas, espaços à 
direita são removidos; VARCHAR(0) é permitido, porém os únicos valores admissíveis são null e a 
string de zero caracteres. 
Tamanho: t + 1 bytes 
Sinônimos: NATIONAL VARCHAR (t) 
VARCHARACTER (t) 
O mesmo que VARCHAR (t). 
YEAR (4) 
Registros de tempo, compostos apenas do ano, com quatro dígitos, entre 1901 e 2155. 
Tamanho: 1 byte 
Sinônimos: nenhum 
20 Capítulo 7: Conhecendo os tipos de dados 
 
YEAR (2) 
Registros de tempo, compostos apenas do ano, com dois dígitos, entre 1970 e 2069. 
Tamanho: 1 byte 
Sinônimos: nenhum 
7.4 TIPOS DE DADOS NO ORACLE 
Alguns dos tipos listados a seguir são aceitos pelo Oracle a título de compatibilidade com tipos 
ANSI, e podem ser utilizados na construção de tabelas, por exemplo. O sistema armazena o nome 
do tipo original mas converte-os para tipos nativos (built-in). Na relação completa de tipos, ao 
final desta seção, os tipos ANSI aparecem destacados dos tipos built-in. 
QUADRO RESUMO DOS TIPOS DE DADOS NO ORACLE 
 Tipo Sinônimos 
 NUMBER DEC, DECIMAL, DOUBLE PRECISION, FLOAT, FLOAT (p), INTEGER, INT, 
NUMERIC, REAL, SMALLINT 
Tempo DATE 
CHAR CHARACTER 
NCHAR NATIONAL CHARACTER, NATIONAL CHAR 
VARCHAR2 VARCHAR, CHARACTER VARYING, CHAR VARYING 
NVARCHAR2 NATIONAL CHARACTER VARYING, NATIONAL CHAR VARYING, 
NCHAR VARYING 
LONG 
CLOB 
 
 
 
String 
NCLOB 
BLOB 
RAW 
 
Binários 
LONG RAW 
BFILE 
ROWID 
 
Específicos 
UROWID 
 
TIPOS LÓGICOS NO ORACLE 
O Oracle não disponibiliza tipos lógicos explícitos, como faz o Access, nem permite que 
expressões aritméticas sejam automaticamente convertidas para valores lógicos como o 
MySQL. Assim, atributos que têm o papel de registrar valores como “sim” ou “não” devem ser 
simulados, seja com tipos string ou numéricos. 
Isso significa que uma consulta como 
select * 
from inscricao 
where nota 
que foi usada como exemplo no caso do Access e do MySQL não é aceita pelo Oracle. Efeito 
semelhante teria de ser obtido com uma consulta como 
select * 
Error! Style not defined. 21 
 
from inscricao 
where nota is not null and nota > 0 
TIPOS NUMÉRICOS NO ORACLE 
Oracle armazena números de ponto flutuante e de ponto fixo. Não há referências explícitas a 
números inteiros, que são armazenados como números de ponto fixo com zero casas decimais. 
Os tipos INTEGER, INT e SMALLINT são tratados como NUMBER (38,0). 
Os tipos DOUBLE, DOUBLE PRECISION e REAL, que permitem compatibilidade com tipos ANSI, são 
interpretados como NUMBER. 
Oracle permite a especificação de escalas negativas, como explicado na seção 7.1. O efeito 
dessas definições é arredondar o número à esquerda da casa decimal. 
TIPOS STRING NO ORACLE 
Oracle oferece tipos para strings de tamanho fixo que manipulam conjuntos de caracteres 
monobyte ou multibyte (CHAR e NCHAR). Esses atributos são completados com brancos no final 
quando são armazenados com comprimentos menores que o tamanho especificado na 
declaração do tipo da coluna. Para strings de tamanho variável, os tipos VARCHAR2 e NVARCHAR2 
suportam, igualmente, conjuntos de caracteres mono ou multibyte. 
Strings longas podem ser armazenadas sob os tipos LONG, CLOB e NCLOB. Os dois últimos 
suportam conjuntos monobyte e multibyte, respectivamente, e têm função similar ao tipo LONG, 
porém com algumas vantagens, entre elas: uma tabela pode conter somente um atributo do tipo 
LONG enquanto CBLOB e NCBLOB podem ocorrer mais de uma vez; LONG pode ir até 2 Gbytes e CBLOB 
e NCBLOB até 4 Gbytes; CBLOB e NCBLOB estão sujeitos aos controles de transação do Oracle, o que 
facilita a manipulação de dados. Colunas dos tipos são armazenadas na base sobo código 
Unicode, de 2 bytes, e são convertidos para o conjunto de caracteres utilizados pelo usuário que 
os recupera. Atributos NCBLOB suportam caracteres com códigos de tamanho variável. 
O tipo LONG é mantido para prover compatibilidade com versões anteriores. A Oracle 
recomenda fortemente que, em novas aplicações, sejam empregados os tipos xLOB para campos 
longos, binários ou strings. 
Oracle suporta vários conjuntos de caracteres, que abrangem idiomas do mundo todo. A lista 
abaixo contém os conjuntos europeus. Além da categorização de mono e multibyte, os 
conjuntos marcados com a palavra ASCII são superconjuntos do código ASCII, sendo portanto 
passíveis de conversão Há ainda outros conjuntos, suportando idiomas asiáticos e do oriente 
médio. 
LEGENDA>>> 
US7ASCII ASCII 7-bit American Monobyte, ASCII 
 SF7ASCII ASCII 7-bit Finnish Monobyte 
 YUG7ASCII ASCII 7-bit Yugoslavian Monobyte 
 RU8BESTA BESTA 8-bit Latin/Cyrillic Monobyte, ASCII 
 EL8GCOS7 Bull EBCDIC GCOS7 8-bit Greek Monobyte 
 WE8GCOS7 Bull EBCDIC GCOS7 8-bit West European Monobyte 
 EL8DEC DEC 8-bit Latin/Greek Monobyte 
 TR7DEC DEC VT100 7-bit Turkish Monobyte 
 TR8DEC DEC 8-bit Turkish Monobyte, ASCII 
 TR8EBCDIC EBCDIC Code Page 1026 8-bit Turkish Monobyte 
 TR8PC857 IBM-PC Code Page 857 8-bit Turkish Monobyte, ASCII 
 TR8MACTURKISH MAC Client 8-bit Turkish Monobyte 
 TR8MACTURKISHS MAC Server 8-bit Turkish Monobyte, ASCII 
 TR8MSWIN1254 MS Windows Code Page 1254 8-bit Turkish Monobyte, ASCII 
 WE8BS2000L5 Siemens EBCDIC.DF.L5 8-bit West European/Turkish Monobyte 
 WE8DEC DEC 8-bit West European Monobyte, ASCII 
 D7DEC DEC VT100 7-bit German Monobyte 
22 Capítulo 7: Conhecendo os tipos de dados 
 
 F7DEC DEC VT100 7-bit French Monobyte 
 S7DEC DEC VT100 7-bit Swedish Monobyte 
 E7DEC DEC VT100 7-bit Spanish Monobyte 
 NDK7DEC DEC VT100 7-bit Norwegian/Danish Monobyte 
 I7DEC DEC VT100 7-bit Italian Monobyte 
 NL7DEC DEC VT100 7-bit Dutch Monobyte 
 CH7DEC DEC VT100 7-bit Swiss (German/French) Monobyte 
 SF7DEC DEC VT100 7-bit Finnish Monobyte 
 WE8DG DG 8-bit West European Monobyte, ASCII 
 WE8EBCDIC37C EBCDIC Code Page 37 8-bit Oracle/c Monobyte 
 WE8EBCDIC37 EBCDIC Code Page 37 8-bit West European Monobyte 
 D8EBCDIC273 EBCDIC Code Page 273/1 8-bit Austrian German Monobyte 
 DK8EBCDIC277 EBCDIC Code Page 277/1 8-bit Danish Monobyte 
 S8EBCDIC278 EBCDIC Code Page 278/1 8-bit Swedish Monobyte 
 I8EBCDIC280 EBCDIC Code Page 280/1 8-bit Italian Monobyte 
 WE8EBCDIC284 EBCDIC Code Page 284 8-bit Latin American/Spanish Monobyte 
 WE8EBCDIC285 EBCDIC Code Page 285 8-bit West European Monobyte 
 F8EBCDIC297 EBCDIC Code Page 297 8-bit French Monobyte 
 WE8EBCDIC500C EBCDIC Code Page 500 8-bit Oracle/c Monobyte 
 WE8EBCDIC500 EBCDIC Code Page 500 8-bit West European Monobyte 
 EE8EBCDIC870 EBCDIC Code Page 870 8-bit East European Monobyte 
 WE8EBCDIC871 EBCDIC Code Page 871 8-bit Icelandic Monobyte 
 EL8EBCDIC875 EBCDIC Code Page 875 8-bit Greek Monobyte 
 CL8EBCDIC1025 EBCDIC Code Page 1025 8-bit Cyrillic Monobyte 
 CL8EBCDIC1025X EBCDIC Code Page 1025 (Modified) 8-bit Cyrillic Monobyte 
 BLT8EBCDIC1112 EBCDIC Code Page 1112 8-bit Baltic Multilingual Monobyte 
 D8EBCDIC1141 EBCDIC Code Page 1141 8-bit Austrian German Monobyte 
 DK8EBCDIC1142 EBCDIC Code Page 1142 8-bit Danish Monobyte 
 S8EBCDIC1143 EBCDIC Code Page 1143 8-bit Swedish Monobyte 
 I8EBCDIC1144 EBCDIC Code Page 1144 8-bit Italian Monobyte 
 F8EBCDIC1147 EBCDIC Code Page 1147 8-bit French Monobyte 
 EEC8EUROASCI EEC Targon 35 ASCI West European/Greek Monobyte 
 EEC8EUROPA3 EEC EUROPA3 8-bit West European/Greek Monobyte 
 LA8PASSPORT German Government Printer 8-bit All-European Latin Monobyte, ASCII 
 WE8HP HP LaserJet 8-bit West European Monobyte 
 WE8ROMAN8 HP Roman8 8-bit West European Monobyte, ASCII 
 HU8CWI2 Hungarian 8-bit CWI-2 Monobyte, ASCII 
 HU8ABMOD Hungarian 8-bit Special AB Mod Monobyte, ASCII 
 LV8RST104090 IBM-PC Alternative Code Page 8-bit Latvian (Latin/Cyrillic) Monobyte, ASCII 
 US8PC437 IBM-PC Code Page 437 8-bit American Monobyte, ASCII 
 BG8PC437S IBM-PC Code Page 437 8-bit (Bulgarian Modification) Monobyte, ASCII 
 EL8PC437S IBM-PC Code Page 437 8-bit (Greek modification) Monobyte, ASCII 
 EL8PC737 IBM-PC Code Page 737 8-bit Greek/Latin Monobyte 
 LT8PC772 IBM-PC Code Page 772 8-bit Lithuanian (Latin/Cyrillic) Monobyte, ASCII 
 LT8PC774 IBM-PC Code Page 774 8-bit Lithuanian (Latin) Monobyte, ASCII 
 BLT8PC775 IBM-PC Code Page 775 8-bit Baltic Monobyte, ASCII 
 WE8PC850 IBM-PC Code Page 850 8-bit West European Monobyte, ASCII 
 EL8PC851 IBM-PC Code Page 851 8-bit Greek/Latin Monobyte, ASCII 
 EE8PC852 IBM-PC Code Page 852 8-bit East European Monobyte, ASCII 
 RU8PC855 IBM-PC Code Page 855 8-bit Latin/Cyrillic Monobyte, ASCII 
 WE8PC858 IBM-PC Code Page 858 8-bit West European Monobyte, ASCII 
 WE8PC860 IBM-PC Code Page 860 8-bit West European Monobyte. ASII 
 IS8PC861 IBM-PC Code Page 861 8-bit Icelandic Monobyte, ASCII 
 CDN8PC863 IBM-PC Code Page 863 8-bit Canadian French Monobyte, ASCII 
 N8PC865 IBM-PC Code Page 865 8-bit Norwegian Monobyte. ASCII 
 RU8PC866 IBM-PC Code Page 866 8-bit Latin/Cyrillic Monobyte, ASCII 
 EL8PC869 IBM-PC Code Page 869 8-bit Greek/Latin Monobyte, ASCII 
 LV8PC1117 IBM-PC Code Page 1117 8-bit Latvian Monobyte, ASCII 
 US8ICL ICL EBCDIC 8-bit American Monobyte 
 WE8ICL ICL EBCDIC 8-bit West European Monobyte 
 WE8ISOICLUK ICL special version ISO8859-1 Monobyte 
 WE8ISO8859P1 ISO 8859-1 West European Monobyte, ASCII 
 EE8ISO8859P2 ISO 8859-2 East European Monobyte, ASCII 
 SE8ISO8859P3 ISO 8859-3 South European Monobyte, ASCII 
 NEE8ISO8859P4 ISO 8859-4 North and North-East European Monobyte, ASCII 
 CL8ISO8859P5 ISO 8859-5 Latin/Cyrillic Monobyte, ASCII 
 AR8ISO8859P6 ISO 8859-6 Latin/Arabic Monobyte, ASCII 
Error! Style not defined. 23 
 
 EL8ISO8859P7 ISO 8859-7 Latin/Greek Monobyte, ASCII 
 IW8ISO8859P8 ISO 8859-8 Latin/Hebrew Monobyte, ASCII 
 NE8ISO8859P10 ISO 8859-10 North European Monobyte, ASCII 
 WE8ISO8859P15 ISO 8859-15 West European Monobyte, ASCII 
 LA8ISO6937 ISO 6937 8-bit Coded Character Set for Text Communication Monobyte, ASCII 
 IW7IS960 Israeli Standard 960 7-bit Latin/Hebrew Monobyte 
 AR8ARABICMAC Mac Server 8-bit Latin/Arabic Monobyte 
 EE8MACCE Mac Client 8-bit Central European Monobyte 
 EE8MACCROATIAN Mac Client 8-bit Croatian Monobyte 
 WE8MACROMAN8 Mac Client 8-bit Extended Roman8 West European Monobyte 
 EL8MACGREEK Mac Client 8-bit Greek Monobyte 
 IS8MACICELANDIC Mac Client 8-bit Icelandic Monobyte 
 CL8MACCYRILLIC Mac Client 8-bit Latin/Cyrillic Monobyte 
 AR8ARABICMACS Mac Server 8-bit Latin/Arabic Monobyte, ASCII 
 EE8MACCES Mac Server 8-bit Central European Monobyte, ASCII 
 EE8MACCROATIANS Mac Server 8-bit Croatian Monobyte, ASCII 
 WE8MACROMAN8S Mac Server 8-bit Extended Roman8 West European Monobyte, ASCII 
 CL8MACCYRILLICS Mac Server 8-bit Latin/Cyrillic Monobyte, ASCII 
 EL8MACGREEKS Mac Server 8-bit Greek Monobyte, ASCII 
 IS8MACICELANDICS Mac Server 8-bit Icelandic Monobyte 
 BG8MSWIN MS Windows 8-bit Bulgarian Cyrillic Monobyte, ASCII 
 LT8MSWIN921 MS Windows Code Page 921 8-bit Lithuanian Monobyte, ASCII 
 ET8MSWIN923 MS Windows Code Page 923 8-bit Estonian Monobyte, ASCII 
 EE8MSWIN1250 MS Windows Code Page 1250 8-bit East European Monobyte, ASCII 
 CL8MSWIN1251 MS Windows Code Page 1251 8-bit Latin/Cyrillic Monobyte, ASCII 
 WE8MSWIN1252 MS Windows Code Page 1252 8-bit West European Monobyte,ASCII 
 EL8MSWIN1253 MS Windows Code Page 1253 8-bit Latin/Greek Monobyte, ASCII 
 BLT8MSWIN1257 MS Windows Code Page 1257 8-bit Baltic Monobyte, ASCII 
 BLT8CP921 Latvian Standard LVS8-92(1) Windows/Unix 8-bit Baltic Monobyte, ASCII 
 LV8PC8LR Latvian Version IBM-PC Code Page 866 8-bit Latin/Cyrillic Monobyte, ASCII 
 WE8NCR4970 NCR 4970 8-bit West European Monobyte, ASCII 
 WE8NEXTSTEP NeXTSTEP PostScript 8-bit West European Monobyte, ASCII 
 CL8KOI8R RELCOM Internet Standard 8-bit Latin/Cyrillic Monobyte, ASCII 
 US8BS2000 Siemens 9750-62 EBCDIC 8-bit American Monobyte 
 DK8BS2000 Siemens 9750-62 EBCDIC 8-bit Danish Monobyte 
 F8BS2000 Siemens 9750-62 EBCDIC 8-bit French Monobyte 
 D8BS2000 Siemens 9750-62 EBCDIC 8-bit German Monobyte 
 E8BS2000 Siemens 9750-62 EBCDIC 8-bit Spanish Monobyte 
 S8BS2000 Siemens 9750-62 EBCDIC 8-bit Swedish Monobyte 
 DK7SIEMENS9780X Siemens 97801/97808 7-bit Danish Monobyte 
 F7SIEMENS9780X Siemens 97801/97808 7-bit French Monobyte 
 D7SIEMENS9780X Siemens 97801/97808 7-bit German Monobyte 
 I7SIEMENS9780X Siemens 97801/97808 7-bit Italian Monobyte 
 N7SIEMENS9780X Siemens 97801/97808 7-bit Norwegian Monobyte 
 E7SIEMENS9780X Siemens 97801/97808 7-bit Spanish Monobyte 
 S7SIEMENS9780X Siemens 97801/97808 7-bit Swedish Monobyte 
 WE8BS2000 Siemens EBCDIC.DF.04 8-bit West European Monobyte 
 CL8BS2000 Siemens EBCDIC.EHC.LC 8-bit Cyrillic Monobyte 
 AL24UTFFSS Unicode 1.1 UTF-8 Universal character set Multibyte, ASCII 
 UTF8 Unicode 2.0 UTF-8 Universal character set Multibyte, ASCII 
 
TIPOS DE CALENDÁRIO NO ORACLE 
No Oracle, o tipo date armazena tempos entre 01/01/-4712 00:00:00 e 31/12/9999 00:00:00, 
com precisão de segundos e permite operações aritméticas sobre operandos dos tipos de registro 
de tempo. Pode-se somar ou subtrair valores, que são transformados em unidades de tempo. 
Por exemplo, somando-se 1 a um registro de tempo obtém-se o registro de tempo, com o mesmo 
horário, do dia seguinte. Somando-se 1/24 a um registro de tempo obtem-se o registro de tempo 
de uma hora depois. A consulta a seguir produz a lista de alunos juntamente com suas datas de 
nascimento e a data em que completam 10.000 dias de vida. 
24 Capítulo 7: Conhecendo os tipos de dados 
 
Embora este seja um recurso útil por vezes, a manipulação de datas é mais segura com as 
funções apropriadas para este fim, apresentadas no capítulo 8. 
Acrescentar INTERVAL DATETIME 
TIPOS BINÁRIOS NO ORACLE 
Os tipos RAW e LONG RAW permitem a armazenagem de dados binários, de formato livre. O 
primeiro aceita tamanhos máximos até 2.000 bytes, enquanto que o segundo vai até 2 Gbytes. 
O tipo BLOB também armazena dados binários, porém permite até 4 Gbytes de comprimento. 
Faz parte da família de tipos xLOB do Oracle, e possuem menos restrições que seus 
correspondentes RAW e LONG RAW. 
O tipo BFILE permite que arquivo externos, com dados binários, sejam referenciados num banco 
Oracle. Na verdade, Oracle mantém informações de localização do arquivo, mas não oferece 
suporte para manipulação, exceto leitura. Não podem ser recuperados em transações, nem 
replicados. Por outro lado, podem ser mantidos pelo sistema operacional como um arquivo 
comum. Arquivos de até 4 Gbytes são suportados com este tipo. 
TIPOS ESPECÍFICOS NO ORACLE 
Os tipos ROWID e UROWID permitem a armazenagem de informações sobre a localização de 
registros num banco de dados. Toda tabela Oracle tem uma pseudocoluna chamada rowid, 
implicitamente definida, que utiliza este tipo de dados. Veja a função de mesmo nome no 
capítulo 8. O segundo tipo, UROWID lida com localização de registros que não são 
permanentes (como no caso de tabelas organizadas em índices, onde os registros residem nas 
folhas e podem mudar de localização) ou que não foram gerados pelo Oracle (como tabelas 
acessadas em bancos externos). Os dois tipos de localizadores são armazenados na 
pseudocoluna rowid. 
RELAÇÃO COMPLETA DOS TIPOS DE DADOS NO ORACLE 
Os tipos de dados aceitos pelo Oracle são apresentados em dois blocos: os tipos nativos, ou 
built-in e os tipos para compatibilidade ANSI. Esses últimos são imediatamente convertidos 
para tipos nativos quando utilizados. 
Tipos built-in 
BLOB 
Dados binários de formato livre, com até 4 Gbytes. 
Tamanho: variável 
Sinônimos: nenhum 
BFILE 
nome nascimento dia10000 
Ricardo Biondi 21/02/80 09/07/07 
Maria Rita Colatti 10/11/78 28/03/06 
Oscarito Vianna 14/08/79 30/12/06 
Barbara Carlito 29/10/79 16/03/07 
Carlos Maradona 15/07/79 30/11/06 
Sacadura Miranda 12/12/81 29/04/09 
Maria Lucia Silva 10/08/75 26/12/02 
select nome, 
 nascimento, 
 nascimento +10000 as dia10000 
from aluno 
Error! Style not defined. 25 
 
Referência a um arquivo binário, de formato livre, externo ao banco de dados. 
Tamanho: variável 
Sinônimos: nenhum 
CLOB 
Strings de caracteres simples, com códigos de tamanho fixo ou variável, de comprimento 
variável, até 4 Gbytes. 
Tamanho: variável 
Sinônimos: nenhum 
CHAR (t) 
Strings de caracteres, de comprimento fixo, 1 ≤ t ≤ 2000. Valores com comprimento menor 
que o máximo são completados com brancos à direita. 
Tamanho: t bytes 
Sinônimos: CHARACTER 
DATE 
Registros de tempo entre 01/01/-4712 e 31/12/9999, com precisão de segundos. 
Tamanho: 7 bytes 
Sinônimos: nenhum 
LONG 
Strings de caracteres, de comprimento variável, com até 2 Gbytes, semelhante ao tipo VARCHAR2. 
Uma tabela pode conter somente uma coluna do tipo LONG. Há uma série de restrições sobre o 
uso de colunas deste tipo. 
Tamanho: variável 
Sinônimos: nenhum 
LONG RAW 
Dados binários de formato livre, de comprimento variável, com até 2 Gbytes. 
Tamanho: variável 
Sinônimos: nenhum 
NCHAR (t) 
Strings de caracteres multibyte, do conjunto padrão nacional, de comprimento fixo, 1 ≤ t ≤ 
2000. Suporta caracteres multibyte. Para caracteres de tamanho fixo, multibyte, o número 
máximo de caracteres deve estar limitado a 2.000 bytes. Para caracteres de tamanho variável, o 
tamanho máximo é dado em bytes, armazenando-se quantos caracteres for possível. 
Tamanho: variável, dependendo do número de bytes necessários para cada caracter 
Sinônimos: NATIONAL CHAR, NATIONAL CHARACTER 
NCLOB 
Strings de caracteres multibyte, com códigos de tamanho fixo ou variável, de comprimento 
variável, até 4 Gbytes. 
Tamanho: variável 
Sinônimos: nenhum 
NUMBER 
Números de ponto flutuante entre 1,0 × 10-130 e 9.9...9 × 10125 , com precisão de 38 dígitos. 
Tamanho: 8 bytes 
Sinônimos: DOUBLE PRECISION, FLOAT, REAL 
NUMBER (p, s) 
Números de ponto fixo com precisão (número de dígitos à esquerda do ponto decimal) de p 
dígitos e escala (número de dígitos à direita do ponto decimal) -84 ≤ s ≤ 127. Um valor que 
excede a precisão causa um erro; um valor que excede a escala é arredondado para a escala 
limite. É possível determinar apenas a escala, na forma NUMBER (*, s). 
Tamanho: variável, até 21 bytes 
Sinônimos: DEC, DECIMAL, FLOAT (p), INTEGER, INT, NUMERIC, SMALLINT 
NUMBER (p) 
O mesmo que NUMBER (p, 0). 
26 Capítulo 7: Conhecendo os tipos de dados 
 
NVARCHAR2 (t) 
Strings de caracteres multibyte do conjunto padrão nacional, de comprimento variável, 1 ≤ t ≤ 
4.000; embora o tamanho mínimo seja 1, é permitido armazenar a string vazia. Suporta 
caracteres multibyte. Para caracteres de tamanho fixo, multibyte, o número máximo de 
caracteres deve estar limitado a 4.000 bytes. Para caracteres de tamanho variável, o tamanho 
máximo é dado em bytes, armazenando-se quantos caracteres for possível. 
Tamanho: Variável, dependendo do número de bytes necessários para cada caracter do 
conjunto padrão 
Sinônimos: NCHAR VARYING (t), NATIONAL CHAR VARYING (t), NATIONAL CHARACTER VARYING (t) 
RAW (t) 
Dados binários de formato livre, de comprimento variável, com 1 ≤ t ≤ 2000. 
Tamanho: variável 
Sinônimos: nenhum 
ROWID 
String hexadecimal que representa o endereçoúnico de um registro numa tabela. Todos os 
registros de uma tabela têm uma pseudocoluna, deste tipo, que contém um código próprio. Veja 
no capítulo 8 a função rowid, que permite que se tenha acesso a esse código. 
Tamanho: 6 bytes 
Sinônimos: nenhum 
UROWID (t) 
Como algumas tabelas não têm um rowid fixo, seja por sua natureza ou porque são externos ao 
banco, o Oracle provê uma espécie de rowid universal, que leva em consideração aspectos 
lógicos do registro. Esses valores podem ser recuperados através da pseudocoluna rowid. 
Tamanho: variável 
Sinônimos: nenhum 
VARCHAR2 (t) 
Strings de caracteres, de comprimento variável, 1 ≤ t ≤ 4.000; embora o tamanho mínimo seja 
1, é permitido armazenar a string vazia. 
Tamanho: t bytes 
Sinônimos: CHAR VARYING (t), CHARACTER VARYING (t), VARCHAR (t) 
 
Os tipos abaixo são sinônimos de outros tipos e têm o papel de prover compatibilidade com 
outras instalações SQL. 
CHARACTER (t) 
O mesmo que CHAR (t). 
INT 
O mesmo que NUMBER (38). 
INTEGER 
O mesmo que NUMBER (38). 
SMALLINT 
O mesmo que NUMBER (38). 
NUMERIC (p, s) 
O mesmo que NUMBER (p, s). 
DOUBLE PRECISION 
O mesmo que NUMBER. 
REAL 
O mesmo que NUMBER. 
FLOAT 
O mesmo que NUMBER. 
DECIMAL (p, s) 
O mesmo que NUMBER (p, s). 
Error! Style not defined. 27 
 
DEC (p, s) 
O mesmo que NUMBER (p, s). 
FLOAT (b) 
Números de ponto flutuante entre 1,0 × 10-130 e 9.9...9 × 10125 (38 noves seguidos de 88 zeros), 
com precisão em dígitos binários de 1 ≤ b ≤ 126 dígitos (que eqüivalem a 38 dígitos de 
precisão decimal). 
Tamanho: 8 bytes 
Sinônimos: nenhum 
NATIONAL CHAR (t) 
O mesmo que NCHAR (t). 
NATIONAL CHARACTER (t) 
O mesmo que NCHAR (t). 
NCHAR VARYING (t) 
O mesmo que NVARCHAR2 (t). 
NATIONAL CHAR VARYING (t) 
O mesmo que NVARCHAR2 (t). 
NATIONAL CHARACTER VARYING (t) 
O mesmo que NVARCHAR2 (t). 
VARCHAR (t) 
O mesmo que VARCHAR2 (t). 
CHAR VARYING (t) 
O mesmo que VARCHAR (t). 
CHARACTER VARYING (t) 
O mesmo que VARCHAR (t). 
 
7.5 TIPOS DE DADOS NO SQL SERVER 
QUADRO RESUMO DOS TIPOS DE DADOS NO SQL SERVER 
 Tipo Sinônimos 
BIT BOOL 
INT INTEGER 
SMALLINT 
TINYINT 
DECIMAL DEC, NUMERIC 
MONEY 
SMALLMONEY 
FLOAT DOUBLE PRECISION, FLOAT (n) para 8 ≤ n ≤ 15 
 
 
 
Numéricos 
REAL FLOAT (n) para 1 ≤ n ≤ 7 
DATETIME 
Tempo SMALLDATETIME 
CHAR CHARACTER 
VARCHAR CHARACTER VARYING 
TEXT 
 
 
 
String NCHAR NATIONAL CHARACTER, NATIONAL CHAR 
28 Capítulo 7: Conhecendo os tipos de dados 
 
NVARCHAR NATIONAL CHARACTER VARYING, NATIONAL CHAR VARYING 
NTEXT NATIONAL TEXT 
BINARY 
VARBINARY BINARY VARYING 
 
Binários 
IMAGE 
TIMESTAMP Específicos 
UNIQUEIDENTIFIER 
 
TIPOS LÓGICOS NO SQL SERVER 
A exemplo do Oracle, o SQL Server não disponibiliza tipos lógicos explícitos, como faz o 
Access, nem permite que expressões aritméticas sejam automaticamente convertidas para 
valores lógicos como o MySQL. Assim, atributos que têm o papel de registrar valores como 
“sim” ou “não” devem ser simulados, seja com tipos string ou numéricos. O tipo BIT (ou BOOL), 
que permite os valores 0 e 1 somente, é bastante adequado para este papel. Ocupando entre 1 e 
8 bits, dependendo da presença de outros atributos do mesmo tipo na tabela, este tipo numérico 
provê uma alternativa para valores tipo “sim” ou “não”, embora não possa ser utilizado 
diretamente no lugar de uma expressão lógica, como pode o tipo YESNO, no Access. 
Veja exemplos sobre isto na seção 7.4 
TIPOS NUMÉRICOS NO SQL SERVER 
SQL Server oferece uma variedade de tipos inteiros, duas opções de números de ponto flutuante 
e tipos decimais. 
O tipo inteiro BIT armazena inteiros de um bit apenas (0 ou 1), mas que podem chegar a ocupar 
até 1 byte dependendo da existência de outros atributos do mesmo tipo na tabela. O tipo 
TINYINT, de 1 byte, suporta inteiros sem sinal; os tipos SMALLINT e INT suportam inteiros de 2 e 4 
bytes, respectivamente. 
Números de ponto flutuante de precisão simples e dupla são suportados pelos tipos REAL e FLOAT. 
Quanto aos números de pontos fixos, o SQL Server disponibiliza o tipo DECIMAL, com precisão e 
escala definidas pelo usuário e os tipos MONEY e SMALLMONEY, que são números inteiros escalados 
com 4 casas decimais fixas, bastante apropriados, como diz o próprio nome, para armazenar 
dados financeiros. O primeiro é armazenado sobre inteiros de 8 bytes e o segundo, de 4 bytes. 
TIPOS STRING NO SQL SERVER 
SQL Server oferece tipos para strings de tamanho fixo (CHAR), até 8.000 bytes, de comprimento 
variável (VARCHAR), também até 8.000 bytes e strings longas (TEXT), com tamanho máximo de 
aproximadamente 2 Gbytes, que armazenam caracteres de conjuntos não Unicode. As mesmas 
características de comprimento valem para os tipos correspondentes (NCHAR, NVARCHAR, e NTEXT) 
que armazenam caracteres Unicode. 
O conjunto de caracter não Unicode escolhido numa instalação é imutável e, portanto, deve ser 
cuidadosamente pensado. Além disso, a ordem pela qual os caracteres são ordenados também é 
estabelecida. SQL Server suporta vários conjuntos de carateres, como mostra a lista abaixo, de 
acordo com cada page code. 
 
LEGENDA>> 
Error! Style not defined. 29 
 
DA>>> 
1252 ISO character set 
850 Multilingual 
437 U.S. English 
874 Thai 
932 Japanese 
936 Chinese (simplified) 
949 Korean 
950 Chinese (traditional) 
1250 Central European 
1251 Cyrillic 
1253 Greek 
1254 Turkish 
1255 Hebrew 
1256 Arabic 
1257 Baltic 
TIPOS DE CALENDÁRIO NO SQL SERVER 
No MS SQL Server há dois tipos de dados que permitem a armazenagem de registros de tempo: 
datetime e smalldatetime. Em ambos os casos o instante de referência é zero hora do dia 
01/01/1900. 
No primeiro tipo, datetime, as datas são armazenadas internamente como dois números inteiros 
de 4 bytes cada um, sendo que o primeiro inteiro contém o número (positivo ou negativo) de 
dias completos entre a data/hora e o instante de referência e o segundo contém o número de 
milisegundos restante, com precisão de 1/300 de segundos (3,3 milisegundos). A amplitude 
compreende o período de zero hora de 01/01/1753 até a meia-noite de 31/12/9999. 
No segundo tipo, smalldatetime, são utilizados dois números inteiros, com 2 bytes cada um, 
para armazenar datas entre a zero hora de 01/01/1900 até a meia-noite de 06/06/2079, com 
precisão de minutos. 
Quando as datas têm o ano especificado com apenas dois dígitos, os anos de 00 até 49 são 
interpretados como 20xx. Para anos entre 50 e 99, considera-se 19xx. O valor de corte pode ser 
alterado pela opção de configuração two digit year cutoff. 
O SQL Server permite operações aritméticas sobre registros de tempo. Como uma data é 
sempre armazenada como um número, pode-se somar ou subtrair valores, que são 
transformados em unidades de tempo. Por exemplo, somando-se 1 a um registro de tempo 
obtém-se o mesmo horário do dia seguinte. Somando-se 1/24 a um registro de tempo obtém-se 
o registro de tempo de uma hora depois. Embora este seja um recurso útil, a manipulação de 
datas é mais segura com as funções apropriadas para este fim, apresentadas no capítulo 8. A 
consulta a seguir produz a lista de alunos juntamente com suas datas de nascimento e a data em 
que completam 10.000,5 dias de vida. 
 
 
 
 
 
 
 
 
 
nome nascimento dia10000 
Ricardo Biondi 21/02/80 09/07/07 12:00:00.000 
Maria Rita Colatti 10/11/78 28/03/06 12:00:00.000 
Oscarito Vianna 14/08/79 30/12/06 12:00:00.000 
Barbara Carlito 29/10/79 16/03/07 12:00:00.000 
Carlos Maradona 30/06/77 15/11/04 12:00:00.000 
Sacadura Miranda 12/12/81 29/04/09 12:00:00.000 
Maria Lucia Silva 10/08/75 26/12/02 12:00:00.000 
select nome, 
 nascimento, 
 nascimento + 10000.5 as dia10000 
from aluno 
30 Capítulo 7: Conhecendo os tipos de dados 
 
Note que o resultado apresenta duas novidades em relação aos exemplos semelhantes usados 
para o Access e Oracle. Como foram somados 10.000,5 unidades a cada data de nascimento (a 
parte decimal donúmero corresponde a doze horas, que é a metade de uma dia), as datas da 
terceira coluna foram apresentadas no formato completo, com ano, mês, dia, horas, minutos, 
segundos e milésimos de segundo, de acordo com a precisão do tipo datetime. Como as datas 
de nascimento foram inicialmente preenchidas sem horário na base de exemplos, vale para as 
mesmas o horário de 00:00:00,000 (zero hora). 
O SQL Server permite apenas as operações de adição e subtração sobre datas. 
TIPOS BINÁRIOS NO SQL SERVER 
SQL Server disponibiliza três tipos de dados para armazenagem de dados binários: BINARY e 
VARBINARY, que permitem dados de tamanho fixo e variável, respectivamente, limitados a 8.000 
bytes, e o tipo IMAGE, que permite dados binários bem mais longos. 
TIPOS ESPECÍFICOS NO SQL SERVER 
O tipo TIMESTAMP serve para armazenar valores que são únicos no âmbito do banco de dados. 
Uma tabela pode ter apenas uma coluna deste tipo e, a cada nova inserção de registro, um novo 
valor é gerado, sem duplicações. 
O tipo UNIQUEIDENTIFIER armazena um identificador único global. Um valor deste tipo pode ser 
criado com a função newid, vista no capítulo 8, ou através de uma constante hexadecimal. 
Atributos deste tipo podem ser comparados apenas pelos operadores de comparação = (igual) e 
<> (diferente), e pelo teste de nulidade is null e is not null. Este tipo de dados é bastante útil em 
esquemas de replicação de dados entre bases de dados. 
RELAÇÃO COMPLETA DOS TIPOS DE DADOS NO SQL SERVER 
BINARY 
O mesmo que BINARY(1). 
BINARY (t) 
Dados binários, de formato livre, de comprimento fixo t, 0 ≤ t ≤ 8.000. 
Tamanho: 4 + n bytes 
Sinônimos: nenhum 
BINARY VARYING (t) 
O mesmo que VARBINARY (t). 
BIT 
Números inteiros, sem sinal, 0 e 1. 
Tamanho: 1 byte (a utilização do tipo BIT é otimizada no SQL Server: as primeiras 8 
colunas deste tipo ocupam o mesmo byte; as próximas 8 colunas ocupam mais 
um byte e assim por diante) 
Sinônimos: nenhum 
CHAR 
O mesmo que CHAR (1). 
CHAR (t) 
Strings de caracteres, de comprimento fixo t, 1 ≤ t ≤ 8.000. 
Tamanho: t bytes 
Sinônimos: CHARACTER (t) 
CHAR VARYING (t) 
O mesmo que VARCHAR (t). 
Error! Style not defined. 31 
 
CHARACTER 
O mesmo que CHAR (1). 
CHARACTER (t) 
O mesmo que CHAR (t). 
CHARACTER VARYING (t) 
O mesmo que VARCHAR (t). 
DATETIME 
Registros de tempo entre 01/01/1753 e 31/12/9999, com precisão de 1/300 segundos. 
Tamanho: 8 bytes 
Sinônimos: nenhum 
DEC (p, s) 
O mesmo que DECIMAL (p, s). 
DECIMAL (p, s) 
Números com precisão e escala fixas; p é o número de dígitos; s é o número de casas decimais. 
A precisão máxima é 28, a não ser que a opção /p seja utilizada na partida do servidor, o que 
muda este máximo para 38. 
Tamanho: variável, dependendo do valor de p: 5 bytes para 1 ≤ p ≤ 9; 9 bytes para 10 ≤ p 
≤ 19; 13 bytes para 20 ≤ p ≤ 28; 17 bytes para 29 ≤ p ≤ 38 
Sinônimos: DEC (p, s), NUMERIC (p, s) 
DOUBLE PRECISION 
O mesmo que FLOAT (53). 
FLOAT 
O mesmo que FLOAT (53). 
FLOAT (b) 
Números de ponto flutuante com um intervalo –1,79 × 10308 até 1,79 × 10308. 
b é o número de bits de precisão. Entre 1 a 24 dígitos binários, tem-se 7 dígitos decimais; de 8 a 
53 tem-se 15 dígitos decimais. 
Tamanho: 4 ou 8 bytes 
Sinônimos: DOUBLE PRECISION 
IMAGE 
Dados de formato livre, de comprimento variável n, 0 ≤ n ≤ 2.147.483.647. 
Tamanho: 4 + n bytes 
Sinônimos: nenhum 
INT 
Números inteiros, com sinal, entre –2.147.483.648 e 2.147.483.647. 
Tamanho: 4 bytes 
Sinônimos: INTEGER 
INTEGER 
O mesmo que INT. 
MONEY 
Números entre –922.337.203.685.477,5808 e 922.337.203.685.477,5807, com precisão fixa e 
escala fixa de 4 casas decimais. 
Tamanho: 8 bytes 
Sinônimos: nenhum 
NATIONAL CHAR (t) 
O mesmo que NCHAR (t). 
NATIONAL CHAR VARYING (t) 
O mesmo que NVARCHAR (t). 
NATIONAL CHARACTER (t) 
O mesmo que NCHAR (t). 
NATIONAL CHARACTER VARYING (t) 
32 Capítulo 7: Conhecendo os tipos de dados 
 
O mesmo que NVARCHAR (t). 
NATIONAL TEXT 
O mesmo que NTEXT. 
NCHAR 
O mesmo que NCHAR (1). 
Sinônimos: NATIONAL CHAR, NATIONAL CHARACTER 
NCHAR (t) 
Strings de caracteres do padrão nacional, de comprimento fixo t, 1 ≤ t ≤ 4.000. 
Tamanho: 2 * t bytes 
Sinônimos: NATIONAL CHAR (t), NATIONAL CHARACTER (t) 
NVARCHAR (t) 
Strings de caracteres Unicode, de comprimento variável n caracteres, 0 ≤ n ≤ t ≤ 4.000. 
Tamanho: 2 * n bytes 
Sinônimos: NATIONAL CHAR VARYING (t), NATIONAL CHARACTER VARYING (t) 
NTEXT 
Strings de caracteres Unicode, de comprimento variável n caracteres, 0 ≤ n ≤ 1.073.741.823. 
Tamanho: 2 * n bytes 
Sinônimos: nenhum 
NUMERIC (p, s) 
O mesmo que DECIMAL (p, s). 
DEC (p, s) 
O mesmo que DECIMAL (p, s). 
REAL 
O mesmo que FLOAT (24). 
SMALLDATETIME 
Registros de tempo entre 01/01/1900 e 06/06/2079, com precisão de minutos. 
Tamanho: 4 bytes 
Sinônimos: nenhum 
SMALLINT 
Números inteiros, com sinal, entre –32.768 e 32.767. 
Tamanho: 2 bytes 
Sinônimos: nenhum 
SMALLMONEY 
Números entre –214.748,3648 e 214.748,3647, com precisão fixa e escala também fixa de 4 
casas decimais. 
Tamanho: 4 bytes 
Sinônimos: nenhum 
TEXT 
Strings de caracteres, de comprimento variável n, 0 ≤ n ≤ 2.147.483.647. 
Tamanho: n bytes 
Sinônimos: nenhum 
TINYINT 
Números inteiros, com sinal, entre 0 e 255. 
Tamanho: 1 byte 
Sinônimos: nenhum 
TIMESTAMP 
Identificador único no âmbito do banco de dados. Uma tabela pode conter apenas uma coluna 
deste tipo. 
Tamanho: 8 bytes 
Sinônimos: nenhum 
UNIQUEIDENTIFIER 
Error! Style not defined. 33 
 
Identificador único global (GUID). 
Tamanho: 16 bytes 
Sinônimos: nenhum 
VARBINARY 
O mesmo que VARBINARY (1). 
VARBINARY (t) 
Dados binários de formato livre, de comprimento variável n, 0 ≤ n ≤ t ≤ 8.000. 
Tamanho: 4 + n bytes 
Sinônimos: BINARY VARYING (t) 
VARCHAR (t) 
Strings de caracteres, de comprimento variável n, 0 ≤ n ≤ t ≤ 8.000. 
Tamanho: n bytes 
Sinônimos: CHAR VARYING (t), CHARACTER VARYING (t) 
 
EXERCÍCIOS 
7.1 Considerando as tabelas da base de exemplos, indique quais seriam os tipos de dados mais 
adequados para seus atributos. Faça uma lista para cada uma das implementações. 
7.2 Suponha que seja preciso construir um banco de dados que armazene informações sobre 
nosso sistema planetário, com os seguintes dados2. 
 
Nome do planeta Órbita média em Km Diâmetro em Km Massa em Kg Satélites naturais 
Mercúrio 57.909.175 4.879,4 3,3 × 1023 0 
Vênus 108.208.930 12.104 4,87 × 1024 0 
Terra 149.597.890 12.756 5,98 × 1024 1 
Marte 227.936.640 6.787 6,42 × 1023 2 
Júpiter 778.412.020 142.800 1,90 × 1027 61 
Saturno 1.426.725.400 120.660 5,69 × 1026 33 
Urano 2.870.972.200 51.118 8,68 × 1025 26 
Netuno 4.498.252.900 49.528 1,02 × 1026 13 
Plutão 5.906.376.200 2.300 1,29 × 1022 1 
Além desses dados, é preciso armazenar, para cada planeta, uma foto ilustrativa com excelente 
resolução e um texto explicativo de até 2.000 palavras. Escolha os tipos de dados para cada 
uma das colunas da tabela, inclusive para a foto e o texto. Faça uma lista para cada 
implementação abordada neste livro. 
7.3 Durante a avaliação de expressões aritméticas num computador, é comum a ocorrência do 
que é chamado underflow e overflow. O primeiro acontece quando um número é muito grande 
para seu tipo e, o segundo, quando um número é muito pequeno. Ilustre, com tipos e valores 
típicos de aplicações de bancos de dados, quando um e outro se verificam. 
7.4 Considere novamente o banco de dados do exercício 5.5. Como o mesmo poderia ser 
implementado no MySQL com a utilização do tipo de dados SET? 
 
 
2 Fonte: Welcome to the planets, disponível no site da NASA (www.nasa.gov).

Outros materiais