从 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-valuetimestamp-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-valuetime-valuetimestamp-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 数据