我正在使用SQLite3 in .cpp
并且正在使用 astd::map<std::string, special_variant_type>
来存储行。一切都很好,但我发现当我SELECT
从(subqueries)
.
比较这些查询:
SELECT `name` FROM `sqlite_master` WHERE `type`='table'; // works as I expected
和(选择任何一个):
// do not work as I expected but might work as expected...
SELECT `name` FROM (SELECT `name` FROM `sqlite_master` WHERE `type`='table');
SELECT [name] FROM (SELECT `name` FROM `sqlite_master` WHERE `type`='table');
问题:第一个带来未修饰的列名。所以,列名是name
。对于从子查询中选择的第二个,列名保持不变。返回backticks, square brackets [], double quotes "
......任何应该是...... IMO的名称包装器,被丢弃。
这是预期的行为吗?似乎不一致,要么保留包装器,要么丢弃它们......
PS:我现在在配对列映射时丢弃它们,仍然......我想知道这是否正确......
PPS:它发生在 sqlite3 库和 Navicat 客户端中。
快速解决方案:3.7.14 已损坏。将您的客户端更新到新版本!替换第 3 方软件中也存在此问题的 DLL(但保留备份副本以防万一)。