如何从Qt中的数据库检索二进制数据?

时间:2018-10-16 16:18:55

标签: c++ mysql sql qt qt5

我无法从MySQL数据库获取QSql查询/模型/记录来检索二进制数据, 我使用自定义生成的查询语句设置字段:

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

这当然是不正确的,在我看来,框架无法正确解释特殊字符或发生其他错误... 如何解决此问题?

编辑:

uid设置为BINARY(24)

1 个答案:

答案 0 :(得分:0)

好,谢谢大家,这是我的错,数据已正确插入,但是在检索(保存记录的基类)时,我首先将所有值插入QMap<QString, QVariant>

代码最近进行了重构,问题就在那里:我使用了m_values_map.insert(key, value.toString())(用于回溯兼容性),这导致了隐式参数转换,使事情搞砸了

如果我始终将其保留为QVariant,则不会出现任何问题m_values_map.insert(key, value)

希望对别人有帮助