查询将值与 0 匹配时返回所有行

问题描述 投票:0回答:5

以前从未遇到过这个,只是无法理解其背后的原因。

我有一个疑问:

SELECT * FROM (`user`) WHERE `user_email` = 0 AND `user_pass` = 0

这显示了所有行,即使我将查询读取为“显示 user_email 和 user_pass 中都有整数 0 的所有记录”。这是为什么?

mysql select
5个回答
1
投票

您输入整数 0,因此它将您的 varchar 字段

user_email
user_pass
转换为 int。实际上,如果非空字符串没有前导数字,它将被转换为 0。例如,

SELECT 'aaaa' = 0; // returns 1 - true
SELECT '1aaa' =0; // 0 -false
SELECT '1aaa' =1 ;// 1 -true

更正。根据 docs,它们将作为浮点进行比较,而不是作为整数进行比较。

在所有其他情况下,参数都作为浮点(实数)进行比较


1
投票

我猜你的字段 user_email 和 user_pass 是 varchar 字段。所以也许将 0 更改为

''
(两个单引号)


0
投票

我想我以前从未见过有人使用括号声明表名。你做到了吗:

SELECT * FROM `user` WHERE `user_email` = 0 AND `user_pass` = 0

0
投票

我认为

user
周围不需要括号。另外,尝试在两个零周围加上引号,这可能会导致问题。


0
投票

由于 user_email 和 user_pass 将是字符串类型,我认为这应该可以:

SELECT * FROM user WHERE user_email = '0' AND user_pass = '0'
© www.soinside.com 2019 - 2024. All rights reserved.