java - LIKE 正在处理 BLOB 类型,但 = 不工作

标签 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�");

查询语句

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/

相关文章:

java - case 表达式中的非静态变量?

java - org.hibernate.exception.ConstraintViolationException : could not execute statement

c - GTK 文本输入

c# - sqlite 不识别通用列表

android - Sqlite 将多行选择为一行

java - 设置 Maven 插件以将 QueryDSL 与 MySQL 数据库结合使用

java - 将图像从数据库单独发送到客户端,然后通过 src 标签获取它是一个好方法吗?

c++ - 解决 sphinx 中此问题的想法

在 C 中比较字符串

java - SQLite (JDBC) 不写入数据