sqlite TEXT列名与值错误相同



我发现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

有人能解释为什么会发生这种情况,或者这是一个应该提出的错误吗?

可能是双引号:

'keyword'单引号中的关键字是字符串文字。"keyword"双引号中的关键字是一个标识符。

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

>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",第二个查询以正确的方式执行。

有人能详细说明为什么会发生这种情况,或者应该首先发生吗?

对于与SELECT或UPDATE语句中的任何字段名称相同的任何字段值,必须对该字段值使用单引号(表示文字值,而不是双引号,表示字段名称)。我在应用程序中修复了此问题。

最新更新