从 C 到 SQL:字符

字符 ODBC C 数据类型的标识符为:

SQL_C_CHAR

SQL_C_WCHAR

下表显示了 C 字符数据可转换为的 ODBC SQL 数据类型。 有关表中的列和术语的说明,请参阅 将数据从 C 转换为 SQL 数据类型

注意

将字符 C 数据转换为 Unicode SQL 数据时,Unicode 数据的长度必须为偶数。

SQL 类型标识符 测试 SQLSTATE
SQL_CHAR

SQL_VARCHAR

SQL_LONGVARCHAR
数据的 <字节长度 = 列长度。

数据的 > 字节长度 列长度。
不适用

22001
SQL_WCHAR

SQL_WVARCHAR

SQL_WLONGVARCHAR
数据的 <字符长度 = 列长度。

数据的 > 字符长度 列长度。
不适用

22001
SQL_DECIMAL

SQL_NUMERIC

SQL_TINYINT

SQL_SMALLINT

SQL_INTEGER SQL_BIGINT
在不截断的情况下转换的数据

通过截断小数位数转换的数据[e]

转换数据将导致整个 (丢失,而不是小数) 位数[e]

数据值不是 数字文本
不适用

22001

22001

22018
SQL_REAL

SQL_FLOAT

SQL_DOUBLE
数据在数字要转换为的数据类型范围内

数据超出了数字要转换为的数据类型的范围

数据值不是 数字文本
不适用

22003

22018
SQL_BIT 数据为 0 或 1

数据大于 0、小于 2 且不等于 1

数据小于 0 或大于或等于 2

数据不是 数字文本
不适用

22001

22003

22018
SQL_BINARY

SQL_VARBINARY

SQL_LONGVARBINARY
(数据) 字节长度 / 2 <= 列字节长度

(数据) 字节长度/2 > 列字节长度

数据值不是十六进制值
不适用

22001

22018
SQL_TYPE_DATE 数据值是有效的 ODBC-date-literal

数据值是有效的 ODBC-timestamp-literal;时间部分为零

数据值是有效的 ODBC-timestamp-literal;time 部分为非零[a]

数据值不是有效的 ODBC-date-literalODBC-timestamp-literal
不适用

不适用

22008

22018
SQL_TYPE_TIME 数据值是有效的 ODBC-time-literal

数据值是有效的 ODBC-timestamp-literal;fractional seconds 部分为零[b]

数据值是有效的 ODBC-timestamp-literal;小数秒部分为非零[b]

数据值不是有效的 ODBC-time-literalODBC-timestamp-literal
不适用

不适用

22008

22018
SQL_TYPE_TIMESTAMP 数据值是有效的 ODBC-timestamp-literal;未截断的小数秒部分

数据值是有效的 ODBC-timestamp-literal;小数秒部分截断

数据值是有效的 ODBC-date-literal[c]

数据值是有效的 ODBC-time-literal[d]

数据值不是有效的 ODBC-date-literalODBC-time-literalODBC-timestamp-literal
不适用

22008

不适用

不适用

22018
所有 SQL 间隔类型 数据值是有效的 间隔值;不发生截断

数据值是有效的 间隔值;其中一个字段中的值被截断

数据值不是有效的间隔文本
不适用

22015

22018

[a] 时间戳的时间部分将被截断。

[b] 忽略时间戳的日期部分。

[c] 时间戳的时间部分设置为零。

[d] 时间戳的日期部分设置为当前日期。

[e] 驱动程序/数据源会有效地等待,直到收到整个字符串 (即使字符数据在尝试执行转换之前通过对 SQLPutData) 的调用分片发送。

将字符 C 数据转换为数字、日期、时间或时间戳 SQL 数据时,将忽略前导和尾随空格。

当字符 C 数据转换为二进制 SQL 数据时,每两个字节的字符数据将转换为一个字节 (8 位) 二进制数据。 每两个字节的字符数据表示十六进制形式的数字。 例如,“01”转换为二进制00000001“FF”转换为二进制11111111。

驱动程序始终将十六进制数字对转换为单个字节,并忽略 null 终止字节。 因此,如果字符串的长度为奇数,则字符串的最后一个字节 (不包括 null 终止字节(如果未转换任何) )。

注意

不建议应用程序开发人员将字符 C 数据绑定到二进制 SQL 数据类型。 这种转换通常效率低下且速度缓慢。