无论我在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
答案 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
FALSE
是0
0 = 0
是TRUE
。