考虑以下方案:
CREATE TABLE IF NOT EXISTS `test` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
--
-- Dumping data for table `test`
--
INSERT INTO `test` (`user_id`, `username`) VALUES
(1, 'Jason'),
(2, 'OOO'),
(3, 'Stack'),
(4, 'Overflow');
这个查询:
SELECT * FROM TEST WHERE username = 0
它显示:
| USER_ID | USERNAME |
----------|----------|--
| 1 | Jason |
| 2 | OOO |
| 3 | Stack |
| 4 | Overflow |
但不是在username = '0'
或username = 1
答案 0 :(得分:4)
由于用户名为String
,并且您已将其与Number
进行比较,因此MySQL会默认将列名转换为数字。 See Here.
当字符串被转换为数字并以字母开头时,该值将为零,这就是显示所有记录的原因。
添加5
,like this demo的用户名后,您将看到除5 <> 0
以外的此用户名以外的所有记录。