Compartilhar via


C para SQL: caractere

Os identificadores do tipo de dados ODBC C do caractere são:

SQL_C_CHAR

SQL_C_WCHAR

A tabela a seguir mostra os tipos de dados SQL ODBC para os quais os dados de caractere C podem ser convertidos. Para obter uma explicação das colunas e dos termos na tabela, consulte Convertendo dados de C para tipos de dados SQL.

Observação

Quando os dados do caractere C são convertidos em dados SQL Unicode, o comprimento dos dados Unicode deve ser um número par.

Identificador de tipo SQL Teste SQLSTATE
SQL_CHAR

SQL_VARCHAR

SQL_LONGVARCHAR
Comprimento de bytes de dados <= Comprimento da coluna.

Comprimento do byte de dados Comprimento da coluna > .
n/d

22001
SQL_WCHAR

SQL_WVARCHAR

SQL_WLONGVARCHAR
Comprimento do caractere de dados <= Comprimento da coluna.

Comprimento do caractere de dados Comprimento da coluna > .
n/d

22001
SQL_DECIMAL

SQL_NUMERIC

SQL_TINYINT

SQL_SMALLINT

SQL_INTEGER SQL_BIGINT
Dados convertidos sem truncamento

Dados convertidos com truncamento de dígitos fracionários[e]

A conversão de dados resultaria na perda de dígitos inteiros (em vez de fracionários) [e]

O valor de dados não é um literal numérico
n/d

22001

22001

22018
SQL_REAL

SQL_FLOAT

SQL_DOUBLE
Os dados estão dentro do intervalo do tipo de dados no qual o número está sendo convertido

Os dados estão fora do intervalo do tipo de dados no qual o número está sendo convertido

O valor de dados não é um literal numérico
n/d

22003

22018
SQL_BIT Os dados são 0 ou 1

Os dados são maiores que 0, menores que 2 e não são iguais a 1

Os dados são menores que 0 ou superiores ou iguais a 2

Os dados não são um literal numérico
n/d

22001

22003

22018
SQL_BINARY

SQL_VARBINARY

SQL_LONGVARBINARY
(Comprimento de bytes de dados) / 2 <= comprimento do byte da coluna

(Comprimento de bytes de dados) / 2 > comprimento de byte de coluna

O valor de dados não é um valor hexadecimal
n/d

22001

22018
SQL_TYPE_DATE O valor de dados é um ODBC-date-literal válido

O valor de dados é um ODBC-timestamp-literal válido; a parte de tempo é zero

O valor de dados é um ODBC-timestamp-literal válido; a parte de tempo não é zero[a]

O valor de dados não é um ODBC-date-literal válido ou ODBC-timestamp-literal
n/d

n/d

22008

22018
SQL_TYPE_TIME O valor de dados é um ODBC-time-literal válido

O valor de dados é um ODBC-timestamp-literal válido; a parte de segundos fracionários é zero[b]

O valor de dados é um ODBC-timestamp-literal válido; a parte de segundos fracionários é diferente de zero[b]

O valor de dados não é um ODBC-time-literal válido ou ODBC-timestamp-literal
n/d

n/d

22008

22018
SQL_TYPE_TIMESTAMP O valor de dados é um ODBC-timestamp-literal válido; fração de segundos porção não truncada

O valor de dados é um ODBC-timestamp-literal válido; fração de segundos porção truncada

O valor de dados é um ODBC-date-literal[c] válido

O valor de dados é um ODBC-time-literal válido[d]

O valor de dados não é um ODBC-date-literal válido, ODBC-time-literal ou ODBC-timestamp-literal
n/d

22008

n/d

n/d

22018
Todos os tipos de intervalo SQL O valor de dados é um valor de intervalo válido; nenhum truncamento ocorre

O valor de dados é um valor de intervalo válido; o valor em um dos campos é truncado

O valor de dados não é um literal de intervalo válido
n/d

22015

22018

[a] A parte de tempo do carimbo de data/hora é truncada.

[b] A parte de data do carimbo de data/hora é ignorada.

[c] A parte de tempo do carimbo de data/hora é definida como zero.

[d] A parte de data do carimbo de data/hora é definida como a data atual.

[e] A fonte de dados/driver espera efetivamente até que toda a cadeia de caracteres seja recebida (mesmo que os dados de caractere sejam enviados em partes por chamadas para SQLPutData) antes de tentar executar a conversão.

Quando os dados do caractere C são convertidos em dados SQL numéricos, de data, hora ou de carimbo de data/hora, os espaços em branco à esquerda e à direita são ignorados.

Quando os dados do caractere C são convertidos em dados SQL binários, cada dois bytes de dados de caractere são convertidos em um único byte (8 bits) de dados binários. Cada dois bytes de dados de caractere representam um número em formato hexadecimal. Por exemplo, "01" é convertido em um 00000001 binário e "FF" é convertido em um 11111111 binário.

O driver sempre converte pares de dígitos hexadecimais em bytes individuais e ignora o byte de terminação nula. Por isso, se o comprimento da cadeia de caracteres for ímpar, o último byte da cadeia de caracteres (excluindo o byte de terminação nula, se houver) não será convertido.

Observação

Os desenvolvedores de aplicativos são desencorajados de associar dados de caractere C a um tipo de dados SQL binário. Essa conversão geralmente é ineficiente e lenta.