其中 varcharcol = 0 返回所有行

End*_*ono 3 mysql-5.5

假设我有一张这样的表:

create table mytable(cola int primary key, colb varchar(10));
Run Code Online (Sandbox Code Playgroud)

让我们把一些数据放进去:

insert into mytable values(1, 'abc');
insert into mytable values(2, 'def');
Run Code Online (Sandbox Code Playgroud)

当我选择使用此查询时:

select * from mytable where colb = 0;
Run Code Online (Sandbox Code Playgroud)

我得到所有行。

请注意 colb 数据类型是 varchar,但我使用 0 作为值。如果我使用 1 或其他整数,则不会得到任何行。

这是为什么?是否有设置可以防止这种行为?

顺便说一句,Windows 的 mysql 5.5.9。

a_h*_*ame 5

这是 MySQL 的数据类型检查不严谨造成的。据我所知,除了编写正确的 SQL 之外,没有解决方法。

一般来说,强烈建议永远不要依赖隐式数据类型转换。确保您的文字与列的数据类型匹配。

所以你应该写:

select * from mytable where colb = '0';
Run Code Online (Sandbox Code Playgroud)