当前位置: 首页 > 知识库问答 >
问题:

java - 为什么mysql中IS TRUE和=True的结果不一样?

胥诚
2024-01-15

为什么mysql中IS TRUE和=True的结果不一样?

我有一张user表,结构如下:
image.png
表中数据如下:
image.png
我尝试查询sql:

SELECT * FROM `user` WHERE is_deleted IS TRUE 

结果为:
image.png
查询sql:

SELECT * FROM `user` WHERE is_deleted = TRUE 

结果为:
image.png

我用true或者false作为查询条件是因为:在java中tinyint能被转成Boolean,所以在查询的时候能直接传true或者false

有没有大佬知道为什么结果不一样呢?

共有2个答案

邓兴为
2024-01-15

is true 的时候,是在评估 is 后面的 true 能否被认为 true,这里的 127 就可以被评估 true

而使用等于的时候。MySQL 会把你传入的值转换成 number,进行比较,也就是这里的 true 被转为了 1127 自然不等于 1

参考:MySQL :: MySQL 8.0 Reference Manual :: 12.3 Type Conversion in Expression Evaluation

白宏大
2024-01-15

= 做的是数值比较,TRUE 是 1 ,并不等于 127 。
IS TRUE 做的是真假判断,非零都为真。

 类似资料:
  • 问题内容: 首先,我的Java版本: 输出为: 31 -117 8 0 0 0 0 0 0 -53 72 -51 -55 -55 47 -49 47 -54 73 1 0 -83 32 -21 -7 10 0 0 0 然后是Go版本: 输出: 31 139 8 0 0 9 110 136 0 255 202 72 205 201 201 47 207 47 202 73 1 0 0 0 255 2

  • 问题内容: 以下测试失败: 换一种说法: 问题答案: 它们是不同的,因为生成器表达式和list comp中的值都是惰性计算的,即在中调用匿名函数时。 到那时,如果绑定到最后一个值-1。 因此,基本上,这就是列表理解的功能(对于genexp也是如此): 现在,lambda携带了一个引用的闭包,但在两种情况下均绑定为-1,因为这是为其分配的最后一个值。 如果要确保lambda接收到的当前值,请执行 这

  • 考虑浮点数0.644696875。让我们用Java和C把它转换成八位小数的字符串: 结果:0.64469688 自己试试吧:http://tpcg.io/oszC0w 结果:0.64469687 自己试试吧:http://tpcg.io/fQqSRF 为什么最后一个数字不同? 数字0.644696875不能精确地表示为机器号。它表示为分数2903456606016923/4503599627370

  • 问题内容: 我想知道子句中和值之间的区别。当我使用而不是时,为什么会给我一个编译错误(一个值可能尚未初始化)。 下面是我的代码: 问题答案: 简短答案 对于编译器,可以推断出在读取之前已初始化的内容。这并非如此。 正式答案: 在读取之前, 所有局部变量都必须有一个 确定的赋值 (14.4.2。局部变量声明的执行): […]如果声明符没有初始化表达式, 则对变量的每次引用都必须在对变量的赋值之前执行

  • 我有自己的方法。net项目来加密密码 我的任务是将此方法转换为java,但在java中,我没有得到与该方法相同的结果。网络版 我的java代码是 加密“1”的结果是: 而java是 你能帮我解决这个问题吗?