我已经定义了这样的架构
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
非常感谢
答案 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);