LIKE正在处理BLOB类型但是=不起作用

时间:2014-06-25 06:17:43

标签: java c sqlite

我有两个BLOB数据类型字段的表。我用过sqlite数据库。我只需要在表格中插入二进制文本。

我用C编写了程序。我已成功插入。

我已使用预准备语句

插入表中

当我尝试使用'='查找条目时,它无效。但LIKE给出了

INSERT INTO test1 VALUES('^A~T^F�u�(Z<-~K�~A3���H9�~\�~A[�$D~G%~^|�',"^Q'^K^S^H�~Iq�~Or~N)V��~K�");

QUERY语句

SELECT COUNT(*) FROM invalid_cert WHERE issuerId='^A~T^F�u�(Z<-~K�~A3���H9�~\�~A[�$D~G%~^|�';

此陈述将计数为0

,而

SELECT COUNT(*) FROM invalid_cert WHERE issuerId LIKE '^A~T^F�u�(Z<-~K�~A3���H9�~\�~A[�$D~G%~^|�';

此语句返回正确的计数。

为什么会这样? 我甚至检查了表中字符串的长度和插入的字符串的长度。两个长度都相同。我甚至检查过字符串是否附加了'\ n'或'\ r'。没有附加这样的字符串。

1 个答案:

答案 0 :(得分:0)

你永远不应该尝试将blob写为字符串。 除编码问题外,字符串和blob不等同。

(LIKE仅适用于字符串,因此blob会自动转换。但是,如果blob实际上不是有效的UTF-8字符串,则转换可能会有损。)

要在查询中使用blob,您可以使用参数:

SELECT COUNT(*) FROM invalid_cert WHERE issuerId = ?

blob literal

SELECT COUNT(*) FROM invalid_cert WHERE issuerId = x'017E5406...'