MySQL中的where子句魔术

Yas*_*uru 2 mysql where-clause

我在MySQL中找到了一些令我惊讶的东西.我创建了一个表并将记录插入其中,如下所示,

CREATE TABLE `test` (
   `ID` int,
   `NAME` varchar(100)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO test VALUES (1,'a'),(2,'b'),(3,'c');
Run Code Online (Sandbox Code Playgroud)

现在,我对此运行两个SELECT查询,如下所示,

select * from test where id;

select * from test where name;
Run Code Online (Sandbox Code Playgroud)

我注意到这些查询不会抛出语法错误,但" 第一个 "选择查询返回结果,select * from test; 而" 第二个 " 查询 不返回任何结果.这意味着如果where子句包含" 整数 "列,我会得到一个结果集,而如果where子句包含" varchar "列,则不会得到任何结果集.

谁能告诉我这是MySQL中的错误还是功能?还解释我为什么会这样.

提前致谢!

jue*_*n d 10

在MySQL中0falsenot 0true.所以

where id比如说就像where 1.

所以你id的全部都是,true并返回记录.

name不能自动转换为not 0数字而已false.

顺便说一句,如果name列值以数字开头,那么它将被转换为该数字并且 true(例如1tom将返回1).