奇怪的sqlite3行为

时间:2013-01-08 11:31:27

标签: sqlite

我正在使用Unix命令行sqlite3命令工具处理一个小型SQLite数据库。我的架构是:

sqlite> .schema
CREATE TABLE status (id text, date integer, status text, mode text);

现在我想将列'mode'设置为所有条目的字符串“Status”。但是,如果我键入:

sqlite> UPDATE status SET mode="Status";

它不是将列'mode'设置为字符串“Status”,而是将每个条目设置为当前位于“status”列中的值。相反,如果我键入以下内容,它会执行预期的行为:

sqlite> UPDATE status SET mode='Status';

这是正常行为吗?

2 个答案:

答案 0 :(得分:1)

这也是常见问题解答: -

我的WHERE子句表达式column1 =“column1”不起作用。它会导致返回表的每一行,而不仅仅是column1的值为“column1”的行。

在SQL中的字符串文字周围使用单引号而不是双引号。这就是SQL标准所要求的。您的WHERE子句表达式应为:column1 ='column2'

SQL在包含特殊字符或关键字的标识符(列名或表名)周围使用双引号。所以双引号是一种转义标识符名称的方法。因此,当你说column1 =“column1”等于column1 = column1时,显然总是如此。

http://www.sqlite.org/faq.html#q24

答案 1 :(得分:0)

是的,这在SQL中是正常的。

单引号用于字符串值;双引号用于标识符(如表名或列名)。 (参见documentation。)