2013-01-08 34 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