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