Mysql 其中id=';2bar&x27;对于INT(11),字段返回假阳性id=2

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

如何确保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'
这工作正常,并显示一个结果,其中
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如果您添加您的评论作为答案,我将接受它,这样您就可以获得积分。