我有一个简单的查询表:

SELECT * from delivery_receipts WHERE siid='';


该表的唯一键是干键(与该问题无关)。
目标列(siid)是一个int(11)字段,非索引且不唯一...

无论如何,我的问题是,当我运行它时,mysql返回所有具有以下内容的行:

SELECT drid,siid from delivery_receipts WHERE siid='0'


但是当然,如​​果我使用指定的siid搜索,则只会显示与siid匹配的行。

因此,似乎我的表格在搜索“”时,在所有具有“ 0”的行上返回匹配项

最佳答案

服务器正在解释Select-Statement,因此可以识别出需要将数据从char转换为int。由于int的默认值,您提供的空字符将被转换为0。

因此,如果要获取所有没有值(NULL)的行,则必须执行

SELECT * from delivery_receipts WHERE siid IS NULL;


编辑

SELECT * from delivery_receipts WHERE ( siid = '$siid' and '$siid' <> '' ) OR ( '$siid' = '' AND siid IS NULL );

09-18 06:43