MySQL:<>1 有效,但 =0 无效


MySQL: <>1 works but =0 doesn't

当我发送查询时

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

它不返回任何内容

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

返回打开=0 时的所有结果。 opened列类型是具有"1"和"0"(默认值)值的枚举。问题是,为什么第一个查询不返回任何内容?

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

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

枚举实际上只是一组可能的字符串。从文档中:

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

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

因此,您必须使用'0'而不是0

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