0

考虑以下方案:

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

这是 SQLFIDDLE 演示

4

1 回答 1

5

由于用户名是String并且您已将其与 a 进行比较Number,因此 MySQL 会默默地将列名转换为数字。看这里。

当字符串转换为数字并以字母开头时,该值将为零,这就是显示所有记录的原因。

添加用户名5就像这个演示一样,你会看到除了这个用户名之外的所有记录,因为5 <> 0

于 2013-09-18T22:15:06.960 回答