解决方法
这是因为双引号,使用单引号将使其正常工作:
sqlite> create table test ( id integer primary key autoincrement,word text not null unique on conflict ignore ); sqlite> insert into test values (1,'xxx'); sqlite> insert into test values (2,'id'); sqlite> select * from test; 1|xxx 2|id sqlite> select * from test where word = "id"; sqlite> select * from test where word = 'id'; 2|id
这是因为id是当前模式中列的名称,因为您可以在列名称周围使用双引号,sqlite认为您在谈论列,而不是给出字符串.即:
sqlite> insert into test values (3,3); sqlite> select * from test where word = "id"; 3|3 sqlite> select * from test where word = id; 3|3
如果你可以在列上使用双引号,那是因为空格在列名中是合法的:
sqlite> create table test2 ( "foo bar" integer ); sqlite> .schema test2 CREATE TABLE test2 ( "foo bar" integer ); sqlite> insert into test2 values (42); sqlite> select * from test2; 42 sqlite> select * from test2 where "foo bar" = 42; 42