WHERE id =' 2bar'对于INT(11)字段,返回false positive id = 2

时间:2017-04-26 14:45:26

标签: 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'

这样可以正常显示id=2的结果。但我发现字符串值是' 2abc'在查询中也返回该行:误报。我宁愿让查询失败并发出信号,表示它无法在id中找到mytable ..

可以通过在运行查询之前确保该值是有效整数来避免这种情况,但是为了将来的目的,我希望保持字符串兼容。

1 个答案:

答案 0 :(得分:0)

这在文档中有详细记载 https://dev.mysql.com/doc/refman/5.7/en/type-conversion.html

检查行

  

这样做的原因是可能存在许多不同的字符串   转换为值1,例如' 1',' 1',或' 1a'。

因此,如果没有显式类型转换,它会将字符串转换为整数,在您的情况下,2abc变为2和2 = 2 =>是的,这称为静默转换

select '2ab'+0; => 2

但是

select 'ab2'+0 => 0