2013-01-08 35 views
0

我正在使用Unix命令行sqlite3命令工具在小型SQLite数据库上工作。我的模式是:奇怪的sqlite3行为

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

现在我想为所有条目的字符串“状态”设置列“模式”。不过,如果我输入:

sqlite> UPDATE status SET mode="Status"; 

而不是设置列“模式”,以字符串“状态”的,它设置每个条目到当前列中的“状态”的值。相反,如果我键入以下内容,它会执行预期行为:

sqlite> UPDATE status SET mode='Status'; 

这是正常行为吗?

回答

0

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

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

1

这也是一个常见问题: -

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

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

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

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