2016-04-30 79 views
1

我使用MySQL,我有一个字段,类型为varchar(50),并将其命名为email,如果我执行这样的查询:凡场= 0返回所有记录

SELECT * FROM `users` WHERE email =0 

它返回表中的所有记录。这怎么可能?

例子:

记录其中之一:[email protected]这也查询返回该行。

为什么会发生这种情况,以及如何避免这种情况?

+0

你试图用这个测试来实现什么。如果你想过滤NULL,你需要写'IS NULL'... –

+0

不,我在缓慢的查询列表上看到了这个查询。 –

+0

如果你的电子邮件地址是varchar,你应该将它与'email ='0''或'email ='''等引号进行比较......将它与一个数字进行比较是错误的,它可能试图将所有的电子邮件转换为数字并比较它与零其中任何字符串返回1这是真的 –

回答

2

当您将字符串字段与数字进行比较时,会将该字符串转换为数字,然后比较这些数字。将字符串转换为数字使用字符串开头的数字;如果它不以数字开头,则它将转换为0

所以,如果你有一个像[email protected]这样的电子邮件它不会被退回,因为这将转换为12。但[email protected]转换为0

你应该写WHERE email = '0'比较它与字符串而不是数字。或者,如果你想测试一个空的电子邮件,请使用WHERE email = ''