将 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=]'
我正在寻找解决此问题的方法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=]'