我有一个包含两个 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�");
查询语句
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' 附加到字符串。没有附加这样的字符串。
最佳答案
永远不要尝试将 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...'
关于java - LIKE 正在处理 BLOB 类型,但 = 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24401507/