假设我有一个这样的表:
create table mytable(cola int primary key, colb varchar(10));
让我们在其中放入一些数据:
insert into mytable values(1, 'abc');
insert into mytable values(2, 'def');
当我选择使用此查询时:
select * from mytable where colb = 0;
我得到所有行。
请注意 colb 数据类型是 varchar,但我使用 0 作为值。如果我使用 1 或其他整数,则不会得到任何行。
这是为什么?是否有防止这种行为的设置?
顺便说一句,适用于 Windows 的 mysql 5.5.9。
这是由于 MySQL 草率的数据类型检查造成的。据我所知,除了编写正确的 SQL 之外,没有解决方法。
一般来说,强烈建议永远不要依赖隐式数据类型转换。确保您的文字与列的数据类型相匹配。
所以你应该写: