如果找不到匹配的列,似乎SQLite显然是作为“兼容性功能”,将双引号标识符解析为字符串文字。
据我所知,对于编写不正确的sql的人,以及与这些人创建的遗留项目的向后兼容性,它会这样做,但是对于我们这些在全新项目上编写正确的sql的人来说,调试非常困难。
例如,
SELECT * FROM "users" WHERE "usernme" = 'joe';
返回一个包含0行的查询,因为字符串'usernme'不等于字符串'joe'。
这让我感到很难过,想知道为什么我没有得到乔的行,即使我知道有一个用户名,直到我煞费苦心地回溯我的代码并意识到我遗漏了一个。
是否有任何“严格模式”PRAGMA或API选项来强制执行引用规则并将所有双引号字符串视为标识符,以便在拼写错误时立即通知我?
(并且,请不要回答告诉我如果我不需要引用标识符,因为任何这样的答案基本上告诉我,为了得到适当的调试,你必须首先编写错误的代码。 )
答案 0 :(得分:1)
这是在SQLite解析器中硬编码的,无法从外部进行更改。
答案 1 :(得分:0)
我还在SQLite频道中询问过,有人看到源代码并创建补丁,甚至在邮件列表上创建了一个描述补丁的帖子:
http://www.mail-archive.com/sqlite-users@sqlite.org/msg73832.html
这不是一个适用于官方版本的答案,但可能有一天会发生。目前,我只是想用这个补丁重新编译它。