mysql返回不匹配查询的记录

时间:2015-06-17 22:12:03

标签: mysql

SELECT * FROM plugin_referral_code WHERE code=0;

返回此记录

enter image description here

什么!为什么呢?

2 个答案:

答案 0 :(得分:1)

MySQL不会为该查询返回错误的结果。请注意,最重要的网站使用MySQL或其分支,因此假设这样的查询无法正常工作是不合逻辑的。

您正在将土豆与西红柿进行比较。 'butts'是一个字符串,0是一个数字。 MySQL(或任何曾经存在的程序)无法将字符串与数字进行比较。因此,它在内部将'butts'转换为数字。如果转换为数字,则任何字符串都为0.

另请注意,您的客户端忽略了解释问题的MySQL警告:

MariaDB [test]> SHOW WARNINGS;
+---------+------+-------------------------------------------+
| Level   | Code | Message                                   |
+---------+------+-------------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'butts' |
+---------+------+-------------------------------------------+
1 row in set (0.00 sec)

我建议立即卸载任何隐藏MySQL警告的客户端......但这是个人意见:)

答案 1 :(得分:-1)

您是否肯定在查询编辑器中执行整个查询?我知道有些编辑器可以执行(突出显示)部分查询。如果您实际上只执行SELECT * FROM plugin_referral_code WHERE code,它将返回任何具有非NULL code值的行。

这是因为where子句需要求值为true,而WHERE code将为任何非NULL code值求值为true。

我能猜到这一切。如果不是这种情况,请提供更多详细信息,例如:类型列code是什么类型,并在其前面使用DESC执行查询以获取任何查询计划详细信息。