在sqlite3中选择失败

时间:2014-08-27 09:46:51

标签: sql database sqlite

我已经定义了这样的架构

sqlite> .schema
CREATE TABLE session(sid vchar(100) PRIMARY KEY ASC, msgid vchar(100), updated int(32), ip vchar(40), port int(32));

但是当我查询数据库使用select * from session when sid='xxxxx'

时没有答案

例如

有一行SINKSESSIONID0153FD46440001|000000000000001542|1409109272|10.0.0.1|35963

当我使用select * from session when sid='SINKSESSIONID0153FD46440001'时 它像这样失败了

sqlite> select * from session where sid = 'SINKSESSIONID0153FD46440001';
sqlite>

但是当我使用select * from session when sid like 'SINKSESSIONID0153FD46440001'时 回答正确的答案

sqlite> select * from session where sid like 'SINKSESSIONID0153FD46440001';
SINKSESSIONID0153FD46440001|000000000000001542|1409109272|10.0.0.1|35963

我不知道为什么......

btw会话中有超过50000行

sqlite> select count(sid) from session;
57570    

非常感谢

1 个答案:

答案 0 :(得分:0)

您的问题是数据库中的某些(全部?)sid值是blob而不是字符串,因此与字符串的比较将不匹配。 (LIKE对blob没有意义,所以它会自动转换为字符串。)

如果sid值应该是blob,则必须将它们与blob值进行比较。 在SQL查询中,可以使用blob literal

完成此操作
SELECT *
FROM session
WHERE sid = x'53494E4B53455353494F4E49443031353346443436343430303031';

如果sid值应该是字符串,则可以使用如下命令修复数据库:

UPDATE session SET sid = CAST(sid AS TEXT);