从 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-literal 或 ODBC-timestamp-literal |
不适用 不适用 22008 22018 |
SQL_TYPE_TIME | 数据值是有效的 ODBC-time-literal 数据值是有效的 ODBC-timestamp-literal;fractional seconds 部分为零[b] 数据值是有效的 ODBC-timestamp-literal;小数秒部分为非零[b] 数据值不是有效的 ODBC-time-literal 或 ODBC-timestamp-literal |
不适用 不适用 22008 22018 |
SQL_TYPE_TIMESTAMP | 数据值是有效的 ODBC-timestamp-literal;未截断的小数秒部分 数据值是有效的 ODBC-timestamp-literal;小数秒部分截断 数据值是有效的 ODBC-date-literal[c] 数据值是有效的 ODBC-time-literal[d] 数据值不是有效的 ODBC-date-literal、 ODBC-time-literal 或 ODBC-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 数据类型。 这种转换通常效率低下且速度缓慢。