我有两个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'。没有附加这样的字符串。
答案 0 :(得分:0)
你永远不应该尝试将blob写为字符串。 除编码问题外,字符串和blob不等同。
(LIKE仅适用于字符串,因此blob会自动转换。但是,如果blob实际上不是有效的UTF-8字符串,则转换可能会有损。)
要在查询中使用blob,您可以使用参数:
SELECT COUNT(*) FROM invalid_cert WHERE issuerId = ?
SELECT COUNT(*) FROM invalid_cert WHERE issuerId = x'017E5406...'