我发现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语句中的任何字段名称相同的任何字段值,必须对该字段值使用单引号(表示文字值,而不是双引号,表示字段名称)。我在应用程序中修复了此问题。