You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何SQLite中布尔字段两种条件查询结果不一致?

问题原因分析

核心原因是SQLite的类型转换规则,结合你字段的实际存储特性导致的:

  1. 你的AlwaysFalseBooleanField字段是TEXT类型,实际存储的是字符串'False'(首字母大写的文本值)。
  2. SQLite里的True和False是内置宏,会被直接替换为整数1和0,而非字符串。
  3. 当TEXT类型的值与NUMERIC类型的值比较时,SQLite会遵循类型转换优先级:将NUMERIC类型的值转换为TEXT类型后再做字符串比较,而非把TEXT值转成数字。

两个查询的具体分析

  • 第一个查询:

    SELECT * 
    FROM MyTable 
    WHERE AlwaysFalseBooleanField = False 
    ORDER BY Index DESC;
    

    False被替换为整数0,SQLite会把0转为字符串'0',再和字段存储的'False'做比较——两者字符串内容完全不同,因此没有匹配行,返回零结果。

  • 第二个查询:

    SELECT * 
    FROM MyTable 
    WHERE AlwaysFalseBooleanField <> True 
    ORDER BY Index DESC;
    

    True被替换为整数1,SQLite将1转为字符串'1',字段存储的'False'和'1'不相等,所有存储'False'的行都满足条件,因此返回预期结果。

修复第一个查询的方法

如果要让第一个查询正常匹配,需要把False当作字符串来比较:

SELECT * 
FROM MyTable 
WHERE AlwaysFalseBooleanField = 'False' 
ORDER BY Index DESC;

内容的提问来源于stack exchange,提问作者nopik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:23:10