为什么sql = FALSE总是返回true

时间:2013-04-10 22:00:34

标签: mysql sql

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

SELECT 'test' = FALSE

SELECT '' = FALSE

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

如果您尝试此查询:

SELECT 'test' = FALSE

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

SELECT '1test' = FALSE

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

答案 1 :(得分:3)

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

取自文档:

  

根据需要,字符串会自动转换为数字和数字到字符串。

所以,在你的情况下:

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