3

如果没有找到匹配的列,SQLite 显然作为“兼容性功能”,将双引号标识符解析为字符串文字。

我知道它适用于编写不正确 sql 的人,以及与这些人创建的遗留项目的向后兼容性,但是对于我们这些在全新项目上编写正确 sql 的人来说,调试非常困难。

例如,

SELECT * FROM "users" WHERE "usernme" = 'joe';

返回一个有 0 行的查询,因为字符串 'usernme' 不等于字符串 'joe'。

这让我摸不着头脑,想知道为什么即使我知道有一个叫这个名字的用户,我也没有得到 joe 的行,直到我煞费苦心地回溯我的代码并意识到我遗漏了一个 a。

是否有任何“严格模式”PRAGMA 或 API 选项来强制执行引用规则并将所有双引号字符串视为标识符,以便在拼写错误时立即通知我?

(请没有答案告诉我在不需要时不要引用标识符,因为任何这样的答案基本上都在告诉我,为了获得正确的调试,您必须首先编写错误的代码。)

4

2 回答 2

1

这是在 SQLite 解析器中硬编码的,不能从外部更改。

于 2012-11-14T18:11:46.340 回答
0

我还在 SQLite 频道中询问过,有人非常友好地查看了源代码并创建了一个补丁,甚至在邮件列表上启动了一个线程来描述该补丁:

http://www.mail-archive.com/sqlite-users@sqlite.org/msg73832.html

这不是一个适用于官方版本的答案,但可能有一天。目前,我只是打算用这个补丁自己重新编译它。

于 2012-11-14T21:02:58.480 回答