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