gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:05:53 26 4
gpt4 key购买 nike

我有一个包含两个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com