将 varchar 字段与数字零 returns 进行比较,就好像它是一个真正的匹配项

comparing a varchar field to the number zero returns as if its a true match

我正在寻找解决此问题的方法and/or我需要它来回复空结果或布尔值 false。

在 MySQL

上使用 sql 语句
`SELECT * FROM users WHERE verify = 0 LIMIT 1`

上面的代码 return 在 table 的第二行。

这是我使用的table:

CREATE TABLE IF NOT EXISTS `users` (
  `user_id` bigint(20) unsigned NOT NULL,
  `username` varchar(30) NOT NULL,
  `password` varchar(60) NOT NULL,
  `email` varchar(30) NOT NULL,
  `firstname` varchar(30) DEFAULT NULL,
  `lastname` varchar(30) DEFAULT NULL,
  `status` tinyint(1) NOT NULL DEFAULT '1',
  `verify` varchar(32) NOT NULL,
  `verified` bit(1) NOT NULL DEFAULT b'0'
) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=latin1;

INSERT INTO `users` VALUES(1, 'admin', 'y$id6rHN6Zy8XHmCkWlAMvGO8pr3K4OD1zfFAZMaVgoGXbezY8SXcT2', 'admin@admin.com', 'Firstname', 'Lastname', 1, '21232f297a57a5a743894a0e4a801fc3', b'1');
INSERT INTO `users` VALUES(36, 'client', 'y$gdtPImQhYoCIiTpTs/veW.BXsWUz6Zcxb.TY6XXQNO6uf5Q7kx99.', 'client@client.com', 'client', 'client', 1, 'cf3873cdefaefa2cc2c4f1efbba23202', b'0');

--编辑,抱歉没有说明我想要什么

我不希望它成为 return 任何东西,或者我怎样才能让它成为 return 错误或空的结果。

现在,我正在使用一个令人讨厌的解决方法,即修改零结果并将其设为文本 "zero",然后再将其传递给 sql 查询。可以,但是,如果有更好的方法可以建议,我们将不胜感激。

我不确定您希望发生什么。当你写:

where verify = 0

MySQL 有一个难题。 verify是一个字符串,0是一个整数。它们不可比较,因此 MySQL 将一个转换为另一个。在这种情况下,它将 verify 转换为整数值,得到 0,并且它们匹配。

如果要进行字符串比较,请使用:

where verify = '0'

不过,那个returns一样的结果。

如果您希望它与 字符 值 0 进行比较,那么也许您需要:

where verify = '[=12=]'