任何人都可以指出这种行为并阻止这种行为吗?
我知道有关强制转换或加双引号的事情。
我想知道是否还有其他方法
此处的表定义
CREATE TABLE `countries` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`country_name` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1
id为1的记录是正确的,但id 2不满足where条件,但被返回。
答案 0 :(得分:2)
尝试一下:
select * from countries where country_name='7884'
答案 1 :(得分:1)
问题是,当您编写country_name = 7884
时,country_name
被隐式转换为signed integer
。正如您所看到的here一样,在转换过程中'S'
只是被忽略了。之所以选择第二行,是因为cast('1884S' AS signed)
= 1884
= 1884
(您的输入)。
正如fa06所建议的那样,用单引号将操作数引起来使其成为字符串并防止隐式强制转换-... where country_name = '7884'
。