Compartilhar via


Entendendo diferenças de tipo de dados

Baixar o JDBC Driver

Há várias diferenças entre os tipos de dados da linguagem de programação Java e os tipos de dados do SQL Server. O Microsoft JDBC Driver para SQL Server ajuda a facilitar essas diferenças por meio de vários tipos de conversões.

Tipos de caracteres

Os tipos de dados da cadeia de caracteres JDBC são CHAR, VARCHAR e LONGVARCHAR. O driver JDBC oferece suporte à API do JDBC 4.0. No JDBC 4.0, os tipos de dados da cadeia de caracteres JDBC também podem ser NCHAR, NVARCHAR e LONGNVARCHAR. Estes novos tipos de cadeia de caracteres mantêm tipos de caracteres nativos de Java em formato Unicode e remove a necessidade de executar alguma conversão ANSI-para-Unicode ou Unicode-para-ANSI.

Type Descrição
Comprimento fixo Os tipos de dados SQL Server char e nchar são mapeados diretamente para os tipos CHAR e NCHAR do JDBC. São tipos de comprimentos fixos com preenchimento fornecidos pelo servidor caso a coluna tenha SET ANSI_PADDING ON. O preenchimento é sempre ligado para nchar, mas para char, no caso em que as colunas de char de servidor não são preenchidas, o driver JDBC adiciona o preenchimento.
Comprimento variável Os tipos SQL Server varchar e nvarchar são mapeados diretamente para os tipos VARCHAR e NVARCHAR do JDBC, respectivamente.
long Os tipos SQL Server text e ntext são mapeados para os tipos LONGVARCHAR e LONGNVARCHAR do JDBC, respectivamente. Esses são tipos preteridos que começam com SQL Server 2005 (9.x); portanto, você deve usar tipos de valor maiores, varchar(max) ou nvarchar(max) .

O uso dos métodos update<Numeric Type> e updateObject (int, java.lang.Object) falhará com relação às colunas de servidor text e ntext. Porém, usar o método setObject com um tipo de conversão de caractere especificado tem suporte para colunas de servidor de text e ntext.

Tipos de cadeia de caracteres binária

Os tipos de cadeia de caracteres binária JDBC são BINARY, VARBINARY e LONGVARBINARY.

Type Descrição
Comprimento fixo O tipo SQL Server binary é mapeado diretamente para o tipo BINARY do JDBC. Esse é um tipo de comprimento fixo com preenchimento fornecido pelo servidor no caso em que a coluna possui SET ANSI_PADDING ON. Quando as colunas de char de servidor não são preenchidas, o driver JDBC adiciona o preenchimento.

O tipo SQL Server timestamp é um tipo BINARY do JDBC com o comprimento fixo de 8 bytes.
Comprimento variável O tipo SQL Server varbinary é mapeado para o tipo VARBINARY do JDBC.

O tipo udt em SQL Server é mapeado para JDBC como um tipo VARBINARY.
long O tipo SQL Server image é mapeado para o tipo LONGVARBINARY do JDBC. Esse tipo foi preterido desde o SQL Server 2005 (9.x), assim, você deve usar um tipo de valor grande, varbinary(max) no lugar dele.

Tipos numéricos exatos

Os tipos numéricos exatos do JDBC mapeiam diretamente para os tipos do SQL Server correspondentes.

Type Descrição
BIT O tipo BIT do JDBC representa um único bit que pode ser 0 ou 1. Isso é mapeado para um tipo SQL Server bit.
TINYINT O tipo TINYINT do JDBC representa um único byte. Isso é mapeado para um tipo SQL Server tinyint.
SMALLINT O tipo SMALLINT do JDBC representa um inteiro de 16 bits com sinal. Isso é mapeado para um tipo SQL Server smallint.
INTEGER O tipo INTEGER do JDBC representa um inteiro de 32 bits com sinal. Isso é mapeado para um tipo SQL Server int.
bigint O tipo BIGINT do JDBC representa um inteiro de 64 bits com sinal. Isso é mapeado para um tipo SQL Server bigint.
NUMERIC O tipo NUMERIC do JDBC representa um valor decimal de precisão fixa que contém valores de precisão idêntica. O tipo NUMERIC é mapeado para o tipo SQL Server numeric.
DECIMAL O tipo DECIMAL do JDBC representa um valor decimal de precisão fixa que contém valores pelo menos da precisão especificada. O tipo DECIMAL é mapeado para o tipo SQL Server decimal.

O tipo DECIMAL do JDBC também é mapeado para os tipos SQL Server money e smallmoney, que são tipos decimais de precisão fixa específicos armazenados em 8 e 4 bytes, respectivamente.

Tipos numéricos aproximados

Os tipos numéricos aproximados do JDBC são REAL, DOUBLE e FLOAT.

Type Descrição
real O tipo REAL do JDBC tem sete dígitos de precisão (precisão única) e é mapeado diretamente para o tipo SQL Server real.
DOUBLE O tipo DOUBLE do JDBC tem 15 dígitos de precisão (precisão dupla) e é mapeado para o tipo SQL Server float. O tipo FLOAT do JDBC é um sinônimo de DOUBLE. Como pode haver confusão entre FLOAT e DOUBLE, a preferência é DOUBLE.

Tipos de Data e Hora

O tipo TIMESTAMP do JDBC é mapeado para os tipos SQL Server datetime e smalldatetime. O tipo datetime é armazenado em dois inteiros de 4 bytes. O tipo smalldatetime contém as mesmas informações (data e hora), mas com menos exatidão, em dois inteiros pequenos de 2 bytes.

Observação

O tipo SQL Server timestamp é um tipo de cadeia de caracteres binária de comprimento fixo. Ele não é mapeado para nenhum dos tipos de hora do JDBC: DATE, TIME ou TIMESTAMP.

Mapeamento de tipo personalizado

O recurso de mapeamento de tipo personalizado do JDBC que usa as interfaces do SQLData para os tipos avançados do JDBC (UDTs, Struct e assim por diante). não é implementado no JDBC Driver.

Confira também

Noções básicas sobre os tipos de dados do JDBC Driver