问题描述
CREATE TABLE `scenario_configuration`
(
`id` BINARY(16) NOT NULL,`filename` VARCHAR(512) NOT NULL,`hash` BIGINT UNSIGNED NOT NULL,`state_id` INT UNSIGNED NOT NULL,CONSTRAINT `PK_scenario` PRIMARY KEY (`id` ASC)
)
;
INSERT INTO `scenario_configuration` (`id`,`filename`,`hash`,`state_id`) VALUES (uuid_to_bin('bfa993de-3a50-4e6c-8072-6e3283822142'),'data6-4.scnx','13283242987924624891','3');
select hash from scenario_configuration where filename = 'data6-4.scnx';
如果我从 MysqL 工作台运行查询,它运行良好,它会向我返回 13283242987924624891
。
然后我使用 Qt 4.8 从 C++ 运行相同的查询(是的,不幸的是它是一个遗留应用程序)。
size_t Database::getScenarioHashFromName(const string& scenarioName) const {
QsqlQuery query(m_database);
const QString GetScenarioHashFromNameQuery{ "select hash from scenario_configuration where filename = '%1';" };
size_t h{ 0 };
query.prepare(GetScenarioHashFromNameQuery.arg(scenarioName.c_str()));
bool ok = query.exec();
if (ok) {
int hashIndex = query.record().indexOf("hash");
while (query.next()) {
auto r = query.value(hashIndex).toULongLong();
auto ss = query.value(hashIndex).toString().toStdString();
h = static_cast<size_t>(r);
}
} else {
auto error = query.lastError();
}
return h;
}
如果我使用 QMysqL
驱动程序执行查询,它运行良好,并且 h
为 13283242987924624891
。但是我需要使用QODBC
驱动,同样的查询返回9223372036854775807
,十六进制显示为0x7fffffffffffffff
。 ss
值是一个 std::string 并且它给了我相同的结果,所以它似乎不是 QVariant
中的转换问题。
为什么我使用相同的代码和查询但不同的驱动程序获得不同的结果,以及如何使用 QODBC
从查询中检索正确的值?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)