MySQL:<> 1可以工作,但= 0不能

时间:2012-06-04 19:20:46

标签: php mysql mysqli

当我发送像

这样的查询时
SELECT id FROM private_messages WHERE to_id=1 AND opened=0

它不会返回任何内容

SELECT id FROM private_messages WHERE to_id=1 AND opened<>1

返回open = 0的所有结果。 opened列类型为枚举,其中包含“1”和“0”(默认值)。问题是,为什么第一个查询不返回任何内容?

2 个答案:

答案 0 :(得分:6)

由于opened是一个枚举,你应该写:

SELECT id FROM private_messages WHERE to_id=1 AND opened='0'

枚举实际上只是一组可能的字符串。来自the documentation

  

ENUM是一个字符串对象,其值从列表中选择   在列中显式枚举的允许值   表创建时的规范。

答案 1 :(得分:0)

在ENUM字段中,您指定为输入值的字符串将自动编码为数字。在可读查询和输出中,数字被转换回查询结果中的相应字符串。

因此,您必须使用'0'代替0

当您以这种方式SELECT id FROM private_messages WHERE to_id=1 AND opened='0'使用查询时,您要求MySQL返回to_id=1opened的索引值为0的所有值,而不是字符串值。