当值的数字以字符串结尾时,MySQL结果出现问题

时间:2018-07-27 10:18:50

标签: mysql sql select casting conditional-statements

任何人都可以指出这种行为并阻止这种行为吗?

我知道有关强制转换或加双引号的事情。

我想知道是否还有其他方法

此处的表定义

CREATE TABLE `countries` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `country_name` varchar(100) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1

enter image description here

id为1的记录是正确的,但id 2不满足where条件,但被返回。

2 个答案:

答案 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'