MYSQL查询Where子句意外结果

时间:2017-12-02 06:04:05

标签: mysql

更新:query用于忘记密码 emailAdd accountNumber 用作用户名,用户可以输入accountNumberemailAdd

我很困惑为什么我的select query会返回row甚至不等于where clause的{​​{1}}。

样本表

accountNumber  |  email
    0          |  a@g.c
    100        |  b@g.c

查询

SELECT accountNumber , email FROM tblsample WHERE accountNumber ='c@g.c' OR email='c@g.c'

意外输出

accountNumber | email
     0        | a@g.c

预期输出

accountNumber  | email

它不应该返回任何row,因为您可以在where clause中看到 c@g.c不等于0

其他信息

column accountNumberint

column emailvarchar

1 个答案:

答案 0 :(得分:2)

查询中没有任何问题,您将accountNumber的数据类型设置为int,将电子邮件设置为varchar。当您为int列传递字符串时,它不能将字符串转换为int,因为在初始点的字符串中没有任何整数值,因此它将返回0.该0值与数据库中的第一个记录匹配所以它返回了第一行。您应该将整数列的大小写输入到字符以与字符串值进行比较。

例如:

SELECT accountNumber , email FROM  tblsample WHERE cast(accountNumber as char(11)) ="c@g.c" OR email="c@g.c";

这不会返回任何行,因为它与条件不匹配。如果您有任何混淆,请告诉我。