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.