SQL to C: Character
The identifiers for the character ODBC SQL data types are:
SQL_CHAR
SQL_VARCHAR
SQL_LONGVARCHAR
SQL_WCHAR
SQL_WVARCHAR
SQL_WLONGVARCHAR
The following table shows the ODBC C data types to which character SQL data may be converted. For an explanation of the columns and terms in the table, see Converting Data from SQL to C Data Types.
|
C type identifier |
Test |
*TargetValuePtr |
*StrLen_or_IndPtr |
SQLSTATE |
|---|---|---|---|---|
|
SQL_C_CHAR |
Byte length of data < BufferLength Byte length of data >= BufferLength |
Data Truncated data |
Length of data in bytes Length of data in bytes |
n/a 01004 |
|
SQL_C_WCHAR |
Character length of data < BufferLength Character length of data >= BufferLength |
Data Truncated data |
Length of data in characters Length of data in characters |
n/a 01004 |
|
SQL_C_STINYINT SQL_C_UTINYINT SQL_C_TINYINT SQL_C_SBIGINT SQL_C_UBIGINT SQL_C_SSHORT SQL_C_USHORT SQL_C_SHORT SQL_C_SLONG SQL_C_ULONG SQL_C_LONG SQL_C_NUMERIC |
Data converted without truncation[b] Data converted with truncation of fractional digits[a] Conversion of data would result in loss of whole (as opposed to fractional) digits[a] Data is not a numeric-literal[b] |
Data Truncated data Undefined Undefined |
Number of bytes of the C data type Number of bytes of the C data type Undefined Undefined |
n/a 01S07 22003 22018 |
|
SQL_C_FLOAT SQL_C_DOUBLE |
Data is within the range of the data type to which the number is being converted[a] Data is outside the range of the data type to which the number is being converted[a] Data is not a numeric-literal[b] |
Data Undefined Undefined |
Size of the C data type Undefined Undefined |
n/a 22003 22018 |
|
SQL_C_BIT |
Data is 0 or 1 Data is greater than 0, less than 2, and not equal to 1 Data is less than 0 or greater than or equal to 2 Data is not a numeric-literal |
Data Truncated data Undefined Undefined |
1[b] 1[b] Undefined Undefined |
n/a 01S07 22003 22018 |
|
SQL_C_BINARY |
Byte length of data <= BufferLength Byte length of data > BufferLength |
Data Truncated data |
Length of data in bytes Length of data |
n/a 01004 |
|
SQL_C_TYPE_DATE |
Data value is a valid date-value[a] Data value is a valid timestamp-value; time portion is zero[a] Data value is a valid timestamp-value; time portion is nonzero[a],[c] Data value is not a valid date-value or timestamp-value[a] |
Data Data Truncated data Undefined |
6[b] 6[b] 6[b] Undefined |
n/a n/a 01S07 22018 |
|
SQL_C_TYPE_TIME |
Data value is a valid time-value and the fractional seconds value is 0[a] Data value is a valid timestamp-value or a valid time-value; fractional seconds portion is zero[a],[d] Data value is a valid timestamp-value; fractional seconds portion is nonzero[a],[d],[e] Data value is not a valid time-value or timestamp-value[a] |
Data Data Truncated data Undefined |
6[b] 6[b] 6[b] Undefined |
n/a n/a 01S07 22018 |
|
SQL_C_TYPE_TIMESTAMP |
Data value is a valid timestamp-value or a valid time-value; fractional seconds portion not truncated[a] Data value is a valid timestamp-value or a valid time-value; fractional seconds portion truncated[a] Data value is a valid date-value[a] Data value is a valid time-value[a] Data value is not a valid date-value, time-value, or timestamp-value[a] |
Data Truncated data Data[f] Data[g] Undefined |
16[b] 16[b] 16[b] 16[b] Undefined |
n/a 01S07 n/a n/a 22018 |
|
All C interval types |
Data value is a valid interval value; no truncation Data value is a valid interval value; truncation of one or more trailing fields Data is valid interval; leading field significant precision is lost The data value is not a valid interval value |
Data Truncated data Undefined Undefined |
Length of data in bytes Length of data in bytes Undefined Undefined |
n/a 01S07 22015 22018 |
[a] The value of BufferLength is ignored for this conversion. The driver assumes that the size of *TargetValuePtr is the size of the C data type.
[b] This is the size of the corresponding C data type.
[c] The time portion of the timestamp-value is truncated.
[d] The date portion of the timestamp-value is ignored.
[e] The fractional seconds portion of the timestamp is truncated.
[f] The time fields of the timestamp structure are set to zero.
[g] The date fields of the timestamp structure are set to the current date.
When character SQL data is converted to numeric, date, time, timestamp, or interval C data, leading and trailing spaces are ignored.