假设我有一张这样的表:
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。
这是 MySQL 的数据类型检查不严谨造成的。据我所知,除了编写正确的 SQL 之外,没有解决方法。
一般来说,强烈建议永远不要依赖隐式数据类型转换。确保您的文字与列的数据类型匹配。
所以你应该写:
select * from mytable where colb = '0';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |