2013-12-10 69 views
4

TL/DR: 我運行此查詢= "Select * from test where id = 0"並返回所有行。MySQL列= 0返回true

這裏是我下面的代碼:

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 

在我心裏但它返回表中的所有行應該不返回行。我錯過了什麼嗎?任何幫助和解釋將是最受歡迎的。

+1

count將始終返回行數。由於沒有'1'的id,它輸出'0'。 –

回答

6

您正在對文本字段執行算術比較。 MySQL會將您的ID列中的值強制爲一個數值,並將其與零比較。當被脅迫時,AA等於零。

1

您已經使用的數據類型爲varchar,並插入記錄,如AABB

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

+0

他試圖讓'0'作爲計數,這將返回1。 – Barmar

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

你需要一個字符串來比較,因爲有一些比較將表數據轉換爲數字,並且非數字字符串轉換爲0.

-1

您正在給id varchar(20)NOT NULL,如表中的字符串和檢查爲數字。 如果id是varchar(20)和SELECT COUNT(*) FROM test WHERE id = 0,則應檢查SELECT COUNT(*) FROM test WHERE id = '0'當id爲int時