5

无论我在 MySQL 5.0 中做什么,例如

SELECT 'test' = FALSE

SELECT '' = FALSE

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

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

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

2 回答 2

4

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

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

如果您尝试此查询:

SELECT 'test' = FALSE

它将返回 1 (TRUE),因为 'test' 将被转换为 0,而如果你尝试这个:

SELECT '1test' = FALSE

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

于 2013-04-10T22:06:21.173 回答
3

这与 MySQL在使用比较运算符时的隐式转换=有关(即)

取自文档:

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

所以,在你的情况下:

  • 'test'转换为0
  • FALSE0
  • 0 = 0TRUE
于 2013-04-10T22:07:07.813 回答