1.首先可以查询我们的数据库字段,我们这里使用的是< bit(1) > 即只能存储一位,也只能是0或者1
2.在数据库操作中也被是涉及到逻辑删除时(即使用某个字段来标识记录是否被删除,而不是从数据库中移除记录),而不同查询条件行为上的差异主要是有数据类型和查询操作符的匹配逻辑造成的。
为什么逻辑删除 用 in (0)或者 in ('0')和 = 0 以及 = '0' 以及 = false 都可以,唯独用 like '%0%' 不行
首先,我们假设你的逻辑删除字段是一个整型(如 INT
)或者布尔型(如某些数据库中的 BOOLEAN
或通常用 TINYINT(1)
表示的布尔等效字段),而字段的值用来表示记录的状态,例如:
- 0 或
'0'
(字符串形式)或false
(布尔型) 表示记录被逻辑删除。 - 非0值(或
true
)表示记录是活动的。
为什么 IN (0)
, IN ('0')
, = 0
, = '0'
, = false
可以工作?
IN (0)
:直接匹配整数值0,适用于整型字段。IN ('0')
:虽然看起来是字符串,但在很多数据库系统中(如MySQL),当与整型字段比较时,字符串会被隐式转换为整数。因此,'0'
被视为0,匹配成功。= 0
:直接比较整数值0,适用于整型字段。= '0'
:同上,由于隐式转换,字符串'0'
被视为整数0,与整型字段匹配。= false
:这通常适用于布尔型字段(如果数据库支持)。在将布尔值传递给数据库时,它可能会被转换成相应的整数值(通常是0表示false
,1表示true
),因此匹配成功。
为什么 LIKE '%0%'
不行?
LIKE '%0%'
:这个操作符用于在字符串中“搜索模式”。当你用它来查询一个整型或布尔型字段时,问题就出现了。大多数数据库不会将整型或布尔型字段隐式转换为“字符串”来进行LIKE
匹配。即使可以(比如某些数据库设置或特殊情况下的隐式转换),这样的查询逻辑上也是不正确的,因为它会在尝试找到字段值中包含“0”的任何位置的字符串表示,这通常不是你想要的逻辑删除检查的意图。
结论
使用 LIKE '%0%'
来进行逻辑删除检查通常是不恰当的,因为它不仅可能不工作(取决于数据类型和数据库的行为),而且逻辑上也是错误的。你应该使用与字段数据类型相匹配的操作符和值来查询逻辑删除的记录,例如使用 =
或 IN
来与整数或布尔值比较,或者使用适当的转换函数(如果确实需要跨类型比较)。