当我发送像
这样的查询时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”(默认值)。问题是,为什么第一个查询不返回任何内容?
答案 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=1
和opened
的索引值为0
的所有值,而不是字符串值。