sqlite的模式匹配不起作用的原因可能是什么?

天花板

我有一个包含日志数据的数据库文件。数据库包含一个表LOG,该表包含一个列MSG表中有30行,其中该MSG行的末尾包含字符串“ down”:

$ sqlite3 log.db "select msg from log" | grep down$ | wc -l
30

但是当我尝试通过找到它们时LIKE,我找不到匹配项:

$ sqlite3 log.db "select msg from log where msg like '%down'" | grep down$ | wc -l
0

这可能是什么原因?

更新:MCVE

CREATE TABLE LOG (MSG VARCHAR(6291456) NOT NULL);

INSERT INTO LOG VALUES (X'666163696c6974793d6461656d6f6e3b636f6d706f6e656e743d6e616d65643b746578743d7368757474696e6720646f776e');

SELECT MSG FROM LOG;                                         -- returns the row
SELECT MSG FROM LOG WHERE MSG LIKE '%down';                  -- returns nothing
SELECT MSG FROM LOG WHERE MSG LIKE '%down%';                 -- returns nothing
SELECT MSG FROM LOG WHERE CAST(MSG AS VARCHAR) LIKE '%down'; -- returns the row

我不知道为什么从VARCHAR转换VARCHAR会有所作为。

更新:另一个MCVE

CREATE TABLE LOG (MSG VARCHAR(6291456) NOT NULL);

INSERT INTO LOG VALUES (X'666163696c6974793d6461656d6f6e3b636f6d706f6e656e743d6e616d65643b746578743d7368757474696e6720646f776e');
INSERT INTO LOG VALUES ('facility=daemon;component=named;text=shutting down');

SELECT ROWID,MSG FROM LOG;                                         -- returns both rows

SELECT ROWID,MSG FROM LOG WHERE MSG LIKE '%down';                  -- returns just the second

SELECT ROWID,MSG FROM LOG WHERE MSG LIKE '%down%';                 -- returns just the second

SELECT ROWID,MSG FROM LOG WHERE CAST(MSG AS VARCHAR) LIKE '%down'; -- returns both rows

SELECT HEX(MSG) FROM LOG;
肖恩

鉴于您的示例数据和在不同版本的sqlite上看到的结果,这是肯定的事情。

首先,您要在表中而不是字符串中插入Blob。这些Blob会按原样存储,而不是TEXT像您正在使用的那样将数字值转换为具有亲和力的列的数值有关列亲缘关系和隐式数据类型转换的详细信息,请参见文档

其次,与这些Blob不匹配的sqlite3实例是在SQLITE_LIKE_DOESNT_MATCH_BLOBS配置选项打开的情况下构建的,而与它们匹配的sqlite3实例是在关闭配置选项的情况下构建的(默认设置)。

如果任一操作数是BLOB,则此编译时选项会使LIKE运算符始终返回False。LIKE的默认行为是在完成比较之前将BLOB操作数强制转换为TEXT。

如果检查PRAGMA compile_options输出,则应该能够验证它是否正在使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Laravel Project在XAMPP htdocs文件夹中不起作用。这可能是什么原因?

来自分类Dev

看来我的提交按钮不起作用。可能是什么问题呢?

来自分类Dev

将数组作为参数传递不起作用。可能是什么错误?

来自分类Dev

php标头不起作用,可能是什么错误?

来自分类Dev

下一个js 404页面不起作用。可能是什么问题呢?

来自分类Dev

sep=' ' 不起作用。是什么原因?

来自分类Dev

模式匹配不起作用

来自分类Dev

Java-为什么这种模式匹配不起作用?

来自分类Dev

为什么 AIML 模式匹配不起作用?

来自分类Dev

为什么重新加载后引导模式弹出而不是窗口加载。可能是什么原因?

来自分类Dev

dicom图像图不良的原因可能是什么

来自分类Dev

cassandra中的sstable损坏的原因可能是什么

来自分类Dev

setShowBadge(false)失败的背后原因可能是什么?

来自分类Dev

QSQLITE ATTACH DATABASE挂起的原因可能是什么

来自分类Dev

此NullPointer异常的原因可能是什么?

来自分类Dev

屏幕短暂闪烁的原因可能是什么

来自分类Dev

shell脚本杀死自己的原因可能是什么?

来自分类Dev

hMatrix中断文件,可能是什么原因?

来自分类Dev

javascript setTimeout 需要多次执行的原因可能是什么?

来自分类Dev

Bash -eq不起作用,可能是因为cal

来自分类Dev

PL SQL过程不起作用(可能是光标错误)

来自分类Dev

重载参数不起作用(可能是因为框架)

来自分类Dev

.htpasswd 不起作用 - 可能是因为参考

来自分类Dev

Scala模式匹配与析取不起作用

来自分类Dev

Java模式匹配不起作用

来自分类Dev

^ 的 zsh grep 模式匹配不起作用

来自分类Dev

“从数学导入sqrt”有效,但“导入数学”不起作用。是什么原因?

来自分类Dev

框影不起作用的主要原因是什么

来自分类Dev

线程可能停在java.util.concurrent.ThreadPoolExecutor.getTask上的原因可能是什么

Related 相关文章

  1. 1

    Laravel Project在XAMPP htdocs文件夹中不起作用。这可能是什么原因?

  2. 2

    看来我的提交按钮不起作用。可能是什么问题呢?

  3. 3

    将数组作为参数传递不起作用。可能是什么错误?

  4. 4

    php标头不起作用,可能是什么错误?

  5. 5

    下一个js 404页面不起作用。可能是什么问题呢?

  6. 6

    sep=' ' 不起作用。是什么原因?

  7. 7

    模式匹配不起作用

  8. 8

    Java-为什么这种模式匹配不起作用?

  9. 9

    为什么 AIML 模式匹配不起作用?

  10. 10

    为什么重新加载后引导模式弹出而不是窗口加载。可能是什么原因?

  11. 11

    dicom图像图不良的原因可能是什么

  12. 12

    cassandra中的sstable损坏的原因可能是什么

  13. 13

    setShowBadge(false)失败的背后原因可能是什么?

  14. 14

    QSQLITE ATTACH DATABASE挂起的原因可能是什么

  15. 15

    此NullPointer异常的原因可能是什么?

  16. 16

    屏幕短暂闪烁的原因可能是什么

  17. 17

    shell脚本杀死自己的原因可能是什么?

  18. 18

    hMatrix中断文件,可能是什么原因?

  19. 19

    javascript setTimeout 需要多次执行的原因可能是什么?

  20. 20

    Bash -eq不起作用,可能是因为cal

  21. 21

    PL SQL过程不起作用(可能是光标错误)

  22. 22

    重载参数不起作用(可能是因为框架)

  23. 23

    .htpasswd 不起作用 - 可能是因为参考

  24. 24

    Scala模式匹配与析取不起作用

  25. 25

    Java模式匹配不起作用

  26. 26

    ^ 的 zsh grep 模式匹配不起作用

  27. 27

    “从数学导入sqrt”有效,但“导入数学”不起作用。是什么原因?

  28. 28

    框影不起作用的主要原因是什么

  29. 29

    线程可能停在java.util.concurrent.ThreadPoolExecutor.getTask上的原因可能是什么

热门标签

归档