SQLite'+';如果是整数(列类型字符串),则删除前缀

SQLite'+';如果是整数(列类型字符串),则删除前缀,sql,sqlite,Sql,Sqlite,我有个奇怪的问题。我在SQLite数据库中将一列定义为STRING,但当我将它与前缀为+的整数一起使用时,它会自动将它们转换为正确的整数: sqlite> create table test (key STRING); sqlite> insert into test values ('+1'); sqlite> insert into test values ("+2"); sqlite> select * from test; 1 2 如您所见,+符号已删除。另一

我有个奇怪的问题。我在SQLite数据库中将一列定义为
STRING
,但当我将它与前缀为
+
的整数一起使用时,它会自动将它们转换为正确的整数:

sqlite> create table test (key STRING);
sqlite> insert into test values ('+1'); 
sqlite> insert into test values ("+2");
sqlite> select * from test;
1
2
如您所见,
+
符号已删除。另一方面,如果我引用字符串两次

sqlite> delete from test;
sqlite> insert into test values ('"+3"');
sqlite> insert into test values ("'+4'");
"+3"
'+4'
。。。它按预期工作,但它们被引用。我的主要问题是我需要“双引号”所有字符串,因为我不能保证某些字符串在数据库中看起来像一个整数,因此会被篡改

这是我想知道的:

  • 为什么SQLite会有这样的行为(可能还有其他实现)
  • 我能做点什么吗?(没有双重引用?)

仅供参考,插入字符串
“+test”
的效果与预期一致:

sqlite> delete from test;
sqlite> insert into test values ('+t');
sqlite> select * from test;
+t

(回答时不加引号-whii!)

这与SQLite的相关。特别是,
STRING
不是有效的类型,因此SQLite将其默认为
NUMERIC
affinity。事实上,引用这一页:

请注意,声明的“浮点”类型将给出整数 亲和性,而不是真正的亲和性,因为“点”末尾的“INT”。 并且声明的“STRING”类型具有NUMERIC的亲缘关系,而不是 文本

您希望将列声明为
文本
,而不是
字符串
。那会解决的