MySQL column = 0返回true

时间:2013-12-10 06:41:02

标签: mysql sql

TL / DR: 我运行此查询= "Select * from test where id = 0"并返回所有行。

以下是我的代码:

 CREATE TABLE IF NOT EXISTS `test` (
   `id` varchar(20) NOT NULL,
   `desc` varchar(100) NOT NULL,
   UNIQUE KEY `id` (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

 INSERT INTO `test` (`id`, `desc`) VALUES
 ('AA', 'AA Desc'),
 ('BB', 'BB Desc');

  SELECT count(*) FROM test WHERE id = 0

在我看来,它应该不返回任何行,但它会返回表中的所有行。我错过了什么吗?任何帮助和解释都是最受欢迎的。

4 个答案:

答案 0 :(得分:6)

您正在对文本字段执行算术比较。 MySQL会将ID列中的值强制转换为数值,并将其与零进行比较。 AA,当被胁迫时,等于零。

答案 1 :(得分:1)

您使用了数据类型varchar,并插入了AABB

等记录

SELECT count(*) FROM test WHERE id = '0'

答案 2 :(得分:1)

SELECT COUNT(*) FROM test WHERE id = '0'

您需要与字符串进行比较,因为与数字进行比较会将表格数据转换为数字,非数字字符串会转换为0。

答案 3 :(得分:-1)

您将id varchar(20)NOT NULL,作为表中的字符串和检查为数字。 你应该检查SELECT COUNT(*) FROM test WHERE id = '0'如果id是varchar(20)和SELECT COUNT(*) FROM test WHERE id = 0当id是int时