Mysql 其中id=';2bar&x27;对于INT(11),字段返回假阳性id=2
如何确保MySQL在向整数值追加字母字符时不会发现误报 结果表明,给定此表:Mysql 其中id=';2bar&x27;对于INT(11),字段返回假阳性id=2,mysql,Mysql,如何确保MySQL在向整数值追加字母字符时不会发现误报 结果表明,给定此表: CREATE TABLE `mytable` ( `id` int(11) NOT NULL, `name` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `mytable` ADD PRIMARY KEY (`id`); 此查询: SELECT * FROM `mytable` WHERE `id`='2
CREATE TABLE `mytable` (
`id` int(11) NOT NULL,
`name` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `mytable`
ADD PRIMARY KEY (`id`);
此查询:
SELECT * FROM `mytable` WHERE `id`='2'
这工作正常,并显示一个结果,其中id=2
。但我注意到,查询中的字符串值'2abc'也会返回该行的值:假阳性。我宁愿让查询失败并发出信号,表明它在mytable
中找不到id
这可以通过在运行查询之前确保该值是有效的整数来避免,但为了将来的目的,我宁愿保持它与字符串兼容 这在文档中有很好的记录 检查线路 原因是可能存在许多不同的字符串 转换为值1,例如“1”、“1”或“1a” 因此,如果没有显式类型转换,它会将字符串转换为整数,在您的示例中,2abc变为2,2=2=>true,这称为静默转换
选择'2ab'+0;=>2
但是
选择'ab2'+0=>0
请参见,这在第行的文档检查中有详细说明。原因是有许多不同的字符串可以转换为值1,例如'1'、'1'或'1a'代码>因此,如果没有显式类型转换,它会将字符串转换为整数,在您的情况下,2abc
变为2,并且2=2=>true
,这称为静默转换选择“2ab”+0;=>2
但是选择'ab2'+0=>0
@AbhikChakraborty如果您添加您的评论作为答案,我将接受它,这样您就可以获得积分。