【发布时间】:2019-10-17 18:07:30
【问题描述】:
在 unixodbc 下使用 ODBC driver for SQLite,我经常从 SQLDescribeCol 得到无用的结果。
例如,在使用以下命令创建的表中:
CREATE TABLE `test_table` (
id INTEGER PRIMARY KEY NOT NULL,
`value` BINARY(3) NOT NULL
)
我执行简单的无参数 ODBC 查询:
SELECT value FROM `test_table`
它返回一个包含一列的结果集,其中我的 C 代码说明了以下内容:
SQLWCHAR title[COLUMN_TITLE_SIZE];
SQLSMALLINT title_length;
SQLSMALLINT sql_type;
SQLULEN column_size;
SQLSMALLINT precision;
SQLSMALLINT nullable;
SQLRETURN rc = SQLDescribeColW(
hstmt,
column_index, // 1 in this case
&title[0],
COLUMN_TITLE_SIZE,
&title_length,
&sql_type,
&column_size,
&precision,
&nullable
);
尽管表定义中有 BINARY,但它返回 sql_type == SQL_VARCHAR。某些类型不存在此问题...例如整数或时间/日期、SQL_BIT 或大多数浮点数。但同样的事情也会发生在 BLOB 列、NCHAR 列,尤其是 DECIMAL 上。
我正在尝试为从语言绑定中的列返回的值自动选择正确的类型,因此区分这种类型很重要。
【问题讨论】: