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
在我看来,它应该不返回任何行,但它会返回表中的所有行。我错过了什么吗?任何帮助和解释都是最受欢迎的。
答案 0 :(得分:6)
您正在对文本字段执行算术比较。 MySQL会将ID列中的值强制转换为数值,并将其与零进行比较。 AA
,当被胁迫时,等于零。
答案 1 :(得分:1)
您使用了数据类型varchar,并插入了AA
,BB
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时