2012-03-21 19 views
0

我發現似乎是一個奇怪的錯誤與sqlite。sqlite文本列名相同的價值bug

我有一個表

CREATE TABLE controller(id INTEGER PRIMARY KEY ASC, controller_number TEXT, password TEXT); 

隨着數據

INSERT INTO controller (controller_number, password) VALUES ("1234", 1234); 

沒有問題存在,但檢查了這一點。

sqlite> SELECT * FROM controller; 
1|1234|1234 
sqlite> UPDATE controller SET controller_number="12345", password="password" WHERE id=1; 
sqlite> SELECT * FROM controller; 
1|12345|1234 

任何人都可以解釋爲什麼會發生這種情況,或者這是一個應該提出的錯誤?

+0

它工作瓦特/單引號? – Sid 2012-03-22 16:11:38

+0

我同意Sid,我的測試表明這個問題與SQLite語言規範中的錯誤使用引號有關。 – 2012-05-03 18:12:36

回答

0
>CREATE TABLE controller(id INTEGER PRIMARY KEY ASC, controller_number TEXT, password TEXT); 
>INSERT INTO controller (controller_number, password) VALUES ("1234", 1234); 
>SELECT * FROM controller; 
1|1234|1234 
>UPDATE controller SET controller_number="12345", password="password" WHERE id=1; 
>SELECT * FROM controller; 
1|12345|1234 

以上會導致一個問題,但如果這樣做

>UPDATE controller SET controller_number='123456', password='password' WHERE id=1; 

我得到這個

>SELECT * FROM controller; 
1|123456|password 

很清楚是怎麼回事時,第一次更新是設置密碼=密碼,而不是passw ord =「密碼」,第二個查詢執行正確的方式。

任何人都可以詳細說明爲什麼發生這種情況,還是應該首先發生?

+0

閱讀本文,它將有所幫助:http://www.sqlite.org/lang_keywords.html – 2012-05-03 18:14:10

2

這可能是雙引號:

「關鍵字」單引號中的關鍵字是一個字符串文字。 「keyword」雙引號中的關鍵字是一個標識符。

http://www.sqlite.org/lang_keywords.html

+0

我不認爲我這樣做。 INSERT不是問題。正如你應該能夠從上面的代碼中看到的那樣,INSERT向表格添加一行罰款。 UPDATE只更新controller_number列並保持密碼列不變。看起來該查詢已經在數據庫上運行,並且沒有返回錯誤。但是,SELECT語句顯示查詢實際上未能更新密碼列。當密碼列的值與列名匹配時,這只是一個問題。 – Ne0 2012-03-22 11:17:13

+0

所以如果你將列值更改爲別的東西,它工作正常嗎? – Sid 2012-03-22 14:49:31

+0

是的,這是正確的。 「更新控制器SET controller_number =」12345「,密碼=」54321「WHERE id = 1;」工程和兩個領域得到更新。我用其他字段名稱測試過它,問題似乎是TEXT字段,其值與列名稱相同。例如。更新控制器SET controller_number =「controller_number」,密碼=「54321」;結果爲1 | 07725686891 | 54321 – Ne0 2012-03-22 15:35:48