Tipos de Dados no SQL Server

Entendendo os tipos de dados do SQL Server e sua importância no design de bancos de dados.

O SQL Server disponibiliza uma ampla gama de tipos de dados, fundamentais para a estruturação de bancos de dados e processamento de dados. Este artigo discute tipos Numéricos, Data/Hora, Caracteres, Binários e Especiais, enfatizando suas utilidades e características técnicas.

Tipos Numéricos Exatos

Os tipos numéricos exatos são utilizados para representar números inteiros e decimais com precisão completa. Incluem-se aqui o bit, que é frequentemente usado para armazenar valores booleanos, os tinyint, smallint, int, e bigint para inteiros de diferentes intervalos de tamanho, e decimal e numeric que são perfeitos para números com precisão decimal fixa. Para valores monetários, o SQL Server oferece os tipos money e smallmoney.

Tipo de Dado Valor Mínimo Valor Máximo Tamanho (em bytes)
bit 0 1 1/8
tinyint 0 255 1
smallint -32,768 32,767 2
int -2,147,483,648 2,147,483,647 4
bigint -9,223,372,036,854,775,808 9,223,372,036,854,775,807 8
decimal(p, s) Varia com precisão e escala Varia com precisão e escala 5-17
numeric(p, s) Varia com precisão e escala Varia com precisão e escala 5-17
money -922,337,203,685,477.5808 922,337,203,685,477.5807 8
smallmoney -214,748.3648 214,748.3647 4

Tipos Numéricos Aproximados

Para valores numéricos que não necessitam de precisão absoluta, os tipos numéricos aproximados como float e real são mais apropriados. Esses tipos são ideais para cálculos científicos ou quando é preciso representar números muito grandes ou muito pequenos.

Tipo de Dado Valor Mínimo Valor Máximo Tamanho (em bytes) Precisão
float -1.79E+308 1.79E+308 4 ou 8 Depende de n
real -3.40E+38 3.40E+38 4 7 dígitos

Tipos de Data e Hora

Os tipos de data e hora permitem armazenar pontos no tempo com diferentes níveis de precisão. O datetime e smalldatetime são usados para combinar datas e horas, enquanto date e time armazenam respectivamente apenas a data ou a hora. datetime2 é uma versão mais precisa do datetime e datetimeoffset inclui a informação de fuso horário junto à data e hora.

Tipo de Dado Faixa de Data Precisão Tamanho (em bytes)
datetime 1753-01-01 a 9999-12-31 Milissegundos 8
smalldatetime 1900-01-01 a 2079-06-06 Minutos 4
date 0001-01-01 a 9999-12-31 Data 3
time 00:00:00.0000000 a 23:59:59.9999999 Nanossegundos 3 a 5
datetime2 0001-01-01 a 9999-12-31 Nanossegundos 6 a 8
datetimeoffset 0001-01-01 a 9999-12-31 Minutos e Nanossegundos 8 a 10

Tipos de Caracteres e Texto

Tipos de caracteres e texto como char, varchar, text, nchar, nvarchar e ntext são usados para armazenar dados alfanuméricos. Enquanto char e nchar têm comprimento fixo, varchar e nvarchar permitem armazenamento de texto com comprimento variável. text e ntext são destinados a textos longos, mas estão obsoletos e devem ser substituídos por varchar(max) e nvarchar(max).

Tipo de Dado Descrição Tamanho Máximo
char Caracteres não Unicode de comprimento fixo 8.000 caracteres
varchar Caracteres não Unicode de comprimento variável 8.000 caracteres
varchar(max) Caracteres não Unicode de comprimento variável para grandes volumes de texto ~2 GB
nchar Caracteres Unicode de comprimento fixo 4.000 caracteres
nvarchar Caracteres Unicode de comprimento variável 4.000 caracteres
nvarchar(max) Caracteres Unicode de comprimento variável para grandes volumes de texto ~1 GB
text Texto não Unicode de comprimento variável (Obsoleto) ~2 GB
ntext Texto Unicode de comprimento variável (Obsoleto) ~1 GB

Tipos Binários

Os tipos binários, como binary e varbinary, são usados para armazenar dados em formato binário. São úteis para armazenar arquivos ou qualquer dado que não se encaixe em tipos de dados convencionais.

Tipo de Dado Descrição Tamanho Máximo
binary Binários de comprimento fixo 8.000 bytes
varbinary Binários de comprimento variável 8.000 bytes
varbinary(max) Binários de comprimento variável para grandes volumes de dados ~2 GB
image Dados binários de comprimento variável para imagens (Obsoleto) ~2 GB

Tipos Especiais

O SQL Server oferece tipos de dados especializados para cenários avançados e específicos. Utilize uniqueidentifier para valores únicos como GUIDs. O sql_variant suporta diversos tipos de dados em uma única coluna. Para armazenar e manipular dados XML, use o tipo xml. Estruturas temporárias de dados podem ser mantidas em colunas do tipo table. Dados geográficos são suportados pelos tipos geometry e geography, enquanto que hierarquias estruturadas são eficientemente gerenciadas com o tipo hierarchyid. O tipo timestamp é utilizado para versionamento de linhas, sendo atualizado automaticamente a cada modificação na linha, não armazenando informações de data e hora, apesar do nome sugerir.

Tipo de Dado Descrição Tamanho Máximo
uniqueidentifier Identificador único global (GUID) 16 bytes
sql_variant Valores de vários tipos de dados 8.000 bytes
xml Dados XML ~2 GB
table Conjunto de linhas para processamento Depende do número de linhas e colunas
geometry Dados espaciais planares Depende da complexidade da forma
geography Dados espaciais geográficos Depende da complexidade da forma
hierarchyid Dados hierárquicos 892 bytes
timestamp Versionamento de linhas, não é uma data/hora real 8 bytes