Используя драйвер ODBC для SQLite в unixodbc, я часто получаю бесполезные результаты из 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
);
Несмотря на двоичный код в определении таблицы, он возвращается с sql_type == SQL_VARCHAR
. Эта проблема не существует для некоторых типов ... таких как целые числа или времена / даты, SQL_BIT или большинство чисел с плавающей запятой. Но то же самое происходит со столбцами BLOB, столбцами NCHAR и, в частности, DECIMAL.
Я пытаюсь автоматически выбрать правильный тип для значений, возвращаемых из столбцов в языковой привязке, и поэтому важно различатьэтот тип.