簡體   English   中英

sqlite TEXT 列名與值錯誤相同

[英]sqlite TEXT column name same as value bug

我發現似乎是 sqlite 的一個奇怪錯誤。

我有一張桌子

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

誰能解釋為什么會發生這種情況,或者這是一個應該提出的錯誤?

它可能是雙引號:

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

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

對於與 SELECT 或 UPDATE 語句中的任何字段名稱相同的任何字段值,您必須對該字段值使用單引號(表示文字值,而不是雙引號,表示字段名稱)。 我在我的應用程序中修復了這個問題。

>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

很明顯發生了什么,第一個 UPDATE 是設置 password=password 而不是 password="password" 並且第二個查詢以正確的方式執行。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM