如何在qt中从数据库中检索二进制数据?

ylamdve6  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(389)

我无法获取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"

转换为十六进制():

2b40efbfbdefbfbd5eefbfbdefbfbdefbfbd19efbfbdefbfbdefbfbdefbfbd35efbfbd6defbfbd1fefbfbd020f5eefbfbdefbfbd

这当然是不正确的,在我看来,框架不能正确解释特殊字符,或者发生了其他错误。。。如何纠正这种行为?
编辑:
uid设置为二进制(24)

8iwquhpp

8iwquhpp1#

好的,谢谢大家,这是我的错,数据已经正确插入,但是在检索(int保存记录的基类)时,我首先在 QMap<QString, QVariant> 代码最近被重构了,问题就在这里:我使用了 m_values_map.insert(key, value.toString()) (用于复古兼容性)这会导致隐式参数转换,从而将事情搞砸
如果我一直这样,就没有问题了 m_values_map.insert(key, value) 希望它能帮助别人

相关问题