У меня есть база данных MySQL со столбцом mediumblob
. Я хочу получить двоичные данные из поля BLOB-объектов в строковый поток С++ с помощью ODBC в Windows.
Сначала я вызываю SQLDescribeCol
, и это указывает, что это тип SQL_LONGVARBINARY
.
Затем я вызываю SQLGetData
следующим образом:
SQLLEN indicator;
SQLCHAR SqlChar[8000];
SQLGetData(m_sqlstatementhandle, i, SQL_CHAR, &SqlChar, sizeof(SqlChar), (SQLLEN*)&indicator);
Затем я продолжаю и записываю данные в stringstream
:
stringstream ss;
ss.write((char*)&SqlChar, indicator);
Это дает мне данные BLOB-объекта, но они хранятся в SqlChar
в виде строки HEX.
Моя программа ожидает, что данные в строковом потоке будут храниться как двоичные. Теперь я мог бы сначала преобразовать строку HEX в двоичную, а затем записать ее в поток строк, но мне это кажется неправильным. Я бы очень хотел получить его как двоичный файл прямо из SQLGetData
.
Итак, пара вопросов:
- Правильно ли я использую
SQLGetData
для типа BLOB-объектов? - Является ли массив
SQLCHAR
подходящим контейнером для записи? - Есть ли способ получить данные в виде двоичных файлов непосредственно из MySQL через ODBC?
Спасибо.