如果没有找到匹配的列,SQLite 显然作为“兼容性功能”,将双引号标识符解析为字符串文字。
我知道它适用于编写不正确 sql 的人,以及与这些人创建的遗留项目的向后兼容性,但是对于我们这些在全新项目上编写正确 sql 的人来说,调试非常困难。
例如,
SELECT * FROM "users" WHERE "usernme" = 'joe';
返回一个有 0 行的查询,因为字符串 'usernme' 不等于字符串 'joe'。
这让我摸不着头脑,想知道为什么即使我知道有一个叫这个名字的用户,我也没有得到 joe 的行,直到我煞费苦心地回溯我的代码并意识到我遗漏了一个 a。
是否有任何“严格模式”PRAGMA 或 API 选项来强制执行引用规则并将所有双引号字符串视为标识符,以便在拼写错误时立即通知我?
(请没有答案告诉我在不需要时不要引用标识符,因为任何这样的答案基本上都在告诉我,为了获得正确的调试,您必须首先编写错误的代码。)