Mysql 其中field=0返回所有记录

Mysql 其中field=0返回所有记录,mysql,Mysql,我使用的是Mysql,我有一个字段类型是varchar(50),名称是email,如果我执行这样的查询: SELECT * FROM `users` WHERE email =0 它返回表上的所有记录。这怎么可能呢 示例: 记录其中一个:gorkemasan24@gmail.com此查询也会返回此行 为什么会发生这种情况以及如何避免这种情况?当您将字符串字段与数字进行比较时,它会将字符串转换为数字,然后比较这些数字。将字符串转换为数字时使用字符串开头的数字;如果它不是以数字开头,它将转换为0

我使用的是Mysql,我有一个字段类型是
varchar(50)
,名称是
email
,如果我执行这样的查询:

SELECT * FROM  `users` WHERE email =0
它返回表上的所有记录。这怎么可能呢

示例:

记录其中一个:
gorkemasan24@gmail.com
此查询也会返回此行


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

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

所以如果你有一封像
12james@domain.com
它不会被返回,因为它会转换为
12
。但是
gorkemasan24@gmail.com
转换为
0


您应该编写
其中email='0'
将其与字符串而不是数字进行比较。或者,如果您想测试一封空电子邮件,请使用
WHERE email=''

通过此测试您想要实现什么。如果要筛选
NULL
s,则需要写入
为NULL
…否,我在慢速查询列表中看到了这个查询。如果您的电子邮件是varchar,您应该将它与引号进行比较,如
email='0'
email=''
…将它与数字进行比较是错误的,可能是试图将您的所有电子邮件转换为数字,并将其与零进行比较,任何字符串都会返回一个1,您应该看看此线程: