从 SQL 到 C:字符
字符 ODBC SQL 数据类型的标识符如下:
- SQL_CHAR
- SQL_VARCHAR
- SQL_LONGVARCHAR
- SQL_WCHAR
- SQL_WVARCHAR
- SQL_WLONGVARCHAR
下表显示了字符 SQL 数据可转换为的 ODBC C 数据类型。 有关表中的列和术语的说明,请参阅 将数据从 SQL 转换为 C 数据类型。
C 类型标识符 | 测试 | TargetValuePtr | StrLen_or_IndPtr | SQLSTATE |
---|---|---|---|---|
SQL_C_CHAR | 数据 <BufferLength 的字节长度 数据的 >字节长度 = BufferLength |
数据 截断的数据 |
数据长度(以字节为单位) 数据长度(以字节为单位) |
不适用 01004 |
SQL_C_WCHAR | 数据 <BufferLength 的字符长度 数据的 >字符长度 = BufferLength |
数据 截断的数据 |
数据长度(以字符为单位) 数据长度(以字符为单位) |
不适用 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 | 在不截断的情况下转换的数据[b] 通过截断小数位数转换的数据[a] 转换数据将导致整个 (丢失,而不是小数) 位数[a] 数据不是 数值文本[b] |
数据 截断的数据 Undefined Undefined |
C 数据类型的字节数 C 数据类型的字节数 Undefined Undefined |
不适用 01S07 22003 22018 |
SQL_C_FLOAT SQL_C_DOUBLE | 数据在数字要转换为的数据类型范围内[a] 数据超出了数字要转换为的数据类型的范围[a] 数据不是 数值文本[b] |
数据 Undefined Undefined |
C 数据类型的大小 Undefined Undefined |
不适用 22003 22018 |
SQL_C_BIT | 数据为 0 或 1 数据大于 0、小于 2 且不等于 1 数据小于 0 或大于或等于 2 数据不是 数字文本 |
数据 截断的数据 Undefined Undefined |
1[b] 1[b] Undefined Undefined |
不适用 01S07 22003 22018 |
SQL_C_BINARY | 数据的 <字节长度 = BufferLength 数据 >BufferLength 的字节长度 |
数据 截断的数据 |
数据长度(以字节为单位) 数据长度 |
不适用 01004 |
SQL_C_TYPE_DATE | 数据值是有效的 date-value[a] 数据值是有效的 时间戳值;time 部分为零[a] 数据值是有效的 时间戳值;time 部分为非零[a],[c] 数据值不是有效的 date-value 或 timestamp-value[a] |
数据 数据 截断的数据 Undefined |
6[b] 6[b] 6[b] Undefined |
不适用 不适用 01S07 22018 |
SQL_C_TYPE_TIME | 数据值为有效的 时间值,秒的小数部分值为 0[a] 数据值是有效的 时间戳值或有效的时间值;小数秒部分为零[a],[d] 数据值是有效的 时间戳值;小数秒部分为非零[a],[d],[e] 数据值不是有效的 时间值 或 timestamp-value[a] |
数据 数据 截断的数据 Undefined |
6[b] 6[b] 6[b] Undefined |
不适用 不适用 01S07 22018 |
SQL_C_TYPE_TIMESTAMP | 数据值是有效的 时间戳值或有效的时间值;未截断的秒小数部分[a] 数据值是有效的 时间戳值或有效的时间值;小数秒部分截断[a] 数据值是有效的 date-value[a] 数据值是有效的 时间值[a] 数据值不是有效的 date-value、 time-value 或 timestamp-value[a] |
数据 截断的数据 Data[f] Data[g] Undefined |
16[b] 16[b] 16[b] 16[b] Undefined |
不适用 01S07 不适用 不适用 22018 |
所有 C 间隔类型 | 数据值是有效的 间隔值;无截断 数据值是有效的 间隔值;截断一个或多个尾随字段 数据为有效间隔;前导字段显著精度丢失 数据值不是有效的间隔值 |
数据 截断的数据 Undefined Undefined |
数据长度(以字节为单位) 数据长度(以字节为单位) Undefined Undefined |
不适用 01S07 22015 22018 |
[a] 对于此转换, 将忽略 BufferLength 的值。 驱动程序假定 *TargetValuePtr 的大小是 C 数据类型的大小。
[b] 这是相应 C 数据类型的大小。
[c] 时间戳值 的时间部分将被截断。
[d] 忽略时间戳值的 日期部分。
[e] 时间戳的秒小数部分被截断。
[f] 时间戳结构的时间字段设置为零。
[g] 时间戳结构的日期字段设置为当前日期。
额外空格
SQL 字符数据转换为以下任何类型时,将忽略前导空格和尾随空格:
- date
- numeric
- time
- timestamp
- interval C 数据