C a SQL: Carácter
Los identificadores del tipo de datos ODBC C de caracteres son:
SQL_C_CHAR
SQL_C_WCHAR
En la tabla siguiente se muestran los tipos de datos DE ODBC SQL a los que se pueden convertir los datos de caracteres de C. Para obtener una explicación de las columnas y los términos de la tabla, vea Convertir datos de C a tipos de datos SQL.
Nota
Cuando los datos de caracteres C se convierten en datos SQL Unicode, la longitud de los datos Unicode debe ser un número par.
Identificador de tipo de SQL | Prueba | SQLSTATE |
---|---|---|
SQL_CHAR SQL_VARCHAR SQL_LONGVARCHAR |
Longitud de bytes de datos <= Longitud de columna. Longitud de bytes de la longitud de la columna de datos > . |
N/D 22001 |
SQL_WCHAR SQL_WVARCHAR SQL_WLONGVARCHAR |
Longitud de caracteres de datos <= Longitud de columna. Longitud de caracteres de la longitud de la columna de datos > . |
N/D 22001 |
SQL_DECIMAL SQL_NUMERIC SQL_TINYINT SQL_SMALLINT SQL_INTEGER SQL_BIGINT |
Datos convertidos sin truncamiento Datos convertidos con truncamiento de dígitos fraccionarios[e] La conversión de datos provocaría la pérdida de dígitos enteros (en lugar de fracciones) [e] El valor de datos no es un literal numérico |
N/D 22001 22001 22018 |
SQL_REAL SQL_FLOAT SQL_DOUBLE |
Los datos están dentro del intervalo del tipo de datos al que se va a convertir el número. Los datos están fuera del intervalo del tipo de datos al que se va a convertir el número. El valor de datos no es un literal numérico |
N/D 22003 22018 |
SQL_BIT | Los datos son 0 o 1 Los datos son mayores que 0, menores que 2 y no iguales a 1 Los datos son menores que 0 o mayores o iguales que 2 Los datos no son literales numéricos |
N/D 22001 22003 22018 |
SQL_BINARY SQL_VARBINARY SQL_LONGVARBINARY |
(Longitud de bytes de datos) / 2 <= longitud de bytes de columna (Longitud de bytes de datos) / 2 > longitud de bytes de columna El valor de datos no es un valor hexadecimal |
N/D 22001 22018 |
SQL_TYPE_DATE | El valor de datos es un valor odbc-date-literal válido El valor de los datos es una marca de tiempo ODBC-timestamp-literal válida; la parte de tiempo es cero El valor de los datos es una marca de tiempo ODBC-timestamp-literal válida; time portion is nonzero[a] El valor de datos no es un odbc-date-literal o ODBC-timestamp-literal válido |
N/D N/D 22008 22018 |
SQL_TYPE_TIME | El valor de datos es un literal de tiempo ODBC válido El valor de los datos es una marca de tiempo ODBC-timestamp-literal válida; la parte de fracciones de segundo es cero[b] El valor de los datos es una marca de tiempo ODBC-timestamp-literal válida; fracciones de segundos es distinto de cero[b] El valor de datos no es un literal odbc-time-literal o ODBC-timestamp-literal válido |
N/D N/D 22008 22018 |
SQL_TYPE_TIMESTAMP | El valor de los datos es una marca de tiempo ODBC-timestamp-literal válida; fracciones de segundos no truncadas El valor de los datos es una marca de tiempo ODBC-timestamp-literal válida; fracciones de segundos truncadas El valor de datos es un odbc-date-literal válido[c] El valor de datos es un odbc-time-literal válido[d] El valor de datos no es un odbc-date-literal, ODBC-time-literal o ODBC-timestamp-literal válido |
N/D 22008 N/D N/D 22018 |
Todos los tipos de intervalo de SQL | El valor de datos es un valor de intervalo válido; no se produce ningún truncamiento El valor de datos es un valor de intervalo válido; el valor de uno de los campos se trunca El valor de datos no es un literal de intervalo válido. |
N/D 22015 22018 |
[a] La parte de tiempo de la marca de tiempo se trunca.
[b] Se omite la parte de fecha de la marca de tiempo.
[c] La parte de tiempo de la marca de tiempo se establece en cero.
[d] La parte de fecha de la marca de tiempo se establece en la fecha actual.
[e] El origen de datos o controlador espera eficazmente hasta que se haya recibido toda la cadena (incluso si los datos de caracteres se envían en fragmentos mediante llamadas a SQLPutData) antes de intentar realizar la conversión.
Cuando los datos de caracteres C se convierten en datos SQL numéricos, de fecha, hora o marca de tiempo, se omiten los espacios en blanco iniciales y finales.
Cuando los datos de caracteres C se convierten en datos binarios de SQL, cada dos bytes de datos de caracteres se convierten en un solo byte (8 bits) de datos binarios. Cada dos bytes de datos de caracteres representa un número en formato hexadecimal. Por ejemplo, "01" se convierte en un 00000001 binario y "FF" se convierte en un 11111111 binario.
El controlador siempre convierte pares de dígitos hexadecimales en bytes individuales y omite el byte de terminación NULL. Por este motivo, si la longitud de la cadena de caracteres es impar, el último byte de la cadena (excepto el byte de terminación NULL, si existe) no se convierte.
Nota
No se recomienda a los desarrolladores de aplicaciones enlazar datos de caracteres C a un tipo de datos SQL binario. Esta conversión suele ser ineficaz y lenta.