【问题标题】:why does sql = FALSE always return true为什么 sql = FALSE 总是返回 true
【发布时间】:2013-04-11 06:13:19
【问题描述】:

不管我在 MySQL 5.0 中做什么,比如

SELECT 'test' = FALSE

SELECT '' = FALSE

我在 SQL 中总是得到 1。这是什么原因?我期待的是 0 或 FALSE

编辑为问题添加上下文。 问题就是这样来的,碰巧 $name 无意中变成了 false 使得这个 join 总是通过,然后我想知道为什么会这样。

SELECT a.id
FROM user a 
INNER JOIN inventory b ON b.user_id = a.id AND b.name = $name

【问题讨论】:

  • 我认为你需要描述你想要做什么。就目前而言,这是荒谬的。
  • 我正在编辑问题以添加一些上下文。

标签: mysql sql


【解决方案1】:

在 MySql 中,FALSE 是一个常量字面量,总是被评估为 0。

因此,您正在检查'test' = 0'' = 0,并且由于您将字符串与整数进行比较,MySql 将尝试将字符串转换为整数。

如果你尝试这个查询:

SELECT 'test' = FALSE

它将返回 1 (TRUE),因为 'test' 将被转换为 0,而如果您尝试以下操作:

SELECT '1test' = FALSE

它将返回 0 (FALSE),因为 '1test' 将被转换为 1。

【讨论】:

    【解决方案2】:

    这与 MySQL 的 implicit conversion 在使用比较运算符(即=)时有关

    取自文档:

    必要时,字符串会自动转换为数字,数字会自动转换为字符串。

    所以,在你的情况下:

    • 'test' 转换为 0
    • FALSE0
    • 0 = 0TRUE

    【讨论】:

      猜你喜欢
      • 2013-09-18
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多