我有一个Table Shop_Categories,它有一个名为Categories_is_hidden的字段,定义为:category_is_hidden tinyint(4) DEFAULT NULL在数据库中,该字段的值为1或空。SELECT * FROM shop_categories where category_is_hidden IS NULL返回所有空项。SELECT * FROM shop_categories where category_is_hidden <> 1返回空集合(即,它排除空值)。为什么最后一个语句不包含空条目?不是空的1吗?编辑:在mysql 5.1和5.5上测试 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 由于您的category_is_hidden列似乎是一个标志,我将其更改为tinyint(1),并将其设置为1或0,而不是1或null。允许列为空将向列的存储要求添加一个字节,从而增加索引大小。接下来,你实际上问的问题。根据定义为空是未知的。你的问题是“给我所有隐藏类别不是1的东西”。但是空列值都是未知的。所以mysql不知道它们是否不是1。您需要重写where as不为空。如果您的列将是三态(1,null,other value),那么您需要使where中包含or以允许这样做。 (adsbygoogle = window.adsbygoogle || []).push({});