为什么SELECT * FROM表where username = 0显示所有行? [用户名栏是varchar]

时间:2013-09-18 22:10:41

标签: mysql sql

考虑以下方案:

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

Here is SQLFIDDLE DEMO

1 个答案:

答案 0 :(得分:4)

由于用户名为String,并且您已将其与Number进行比较,因此MySQL会默认将列名转换为数字。 See Here.

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

添加5like this demo的用户名后,您将看到除5 <> 0以外的此用户名以外的所有记录。