Как извлечь двоичные данные из базы данных в Qt? - PullRequest
0 голосов
/ 16 октября 2018

Я не могу получить QSql Query / Model / Record для извлечения двоичных данных из базы данных MySQL, я задаю поле с помощью пользовательского сгенерированного оператора запроса:

INSERT INTO `Table`( `id`, `uid`,) VALUES ('1', X'2b40b58f5eb580bd198389e1e435e16da31fc2020f5ea48b');

Проверено с помощью MySql Workbench, и он отображаетправильное значение bin

Но, когда я пытаюсь получить поле в Qt, используя:

QSqlQueryModel model;
model.setQuery(query);
QSqlRecord record=model.record(0);
QByteArray uid=record.value("uid").toByteArray();

, я получаю:

"+@\xEF\xBF\xBD\xEF\xBF\xBD^\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD\x19\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD""5\xEF\xBF\xBDm\xEF\xBF\xBD\x1F\xEF\xBF\xBD\x02\x0F^\xEF\xBF\xBD\xEF\xBF\xBD"

, преобразовывающий в Hex ():

2b40efbfbdefbfbd5eefbfbdefbfbdefbfbd19efbfbdefbfbdefbfbdefbfbd35efbfbd6defbfbd1fefbfbd020f5eefbfbdefbfbd

Что, конечно, не правильно, мне кажется, что фреймворк не может правильно интерпретировать специальные символы или что-то еще не так ... Как исправить это поведение?

edit:

uid установлен в BINARY (24)

1 Ответ

0 голосов
/ 17 октября 2018

Хорошо, спасибо всем, это была моя ошибка, данные были вставлены правильно, но при получении (в базовом классе, содержащем запись) я сначала вставляю все значения в код QMap<QString, QVariant>

недавнорефакторинг, и проблема есть: я использовал m_values_map.insert(key, value.toString()) (использовался для ретро-совместимости), что приводит к неявному преобразованию аргумента, что испортило все

Если я всегда буду держать его как QVariant, то проблем не будет m_values_map.insert(key, value)

надеюсь, что это поможет кому-то еще

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...