2013-09-26 31 views
4

我有一個數據庫表與幾列。其中一列旨在作爲一個布爾值設置爲TINYINT(1)DEFAULT 0當您運行查詢「SELECT * FROM table_name WHERE column_name;」時發生了什麼?

我意外地發現,如果你運行此查詢

SELECT * FROM table_name WHERE column_name; 

返回行有列名= 1 。

我很想知道MySql用來處理這個查詢的邏輯。

+0

如果您忽略該值,則會將條件視爲布爾表達式,查找列爲「true」 - 非布爾值的「true」取決於類型。對於數字,它不是0。 – Orbling

+0

我嘗試了更多,我認爲你的權利。但奇怪的是,它不適用於varchar。我還沒有嘗試過任何其他數據類型。 這是記錄在任何地方?我無法找到任何關於行爲的信息。 –

+0

@Orbling如果包含該值,它仍將其視爲布爾表達式。 ;)WHERE子句總是一個布爾表達式。只是如果你不測試一個條件,那麼得到的評估值是它本身的值是真還是假,因爲這個值是整個表達式。 –

回答

2

作爲文檔說在「選擇語法」(http://dev.mysql.com/doc/refman/5.1/en/select.html

where_condition是評估爲真對於要被選擇的每一行

所以簡單的列名求值的表達式作爲布爾值並選擇相應的行。你會發現它也適用於整數。

+0

這非常有意義,我只是很驚訝,無法在互聯網上找到有關此行爲的任何特定文檔,上述文檔絕對正確,但內容相當廣泛。另外,如何實現字符串值並不像整數那樣清晰。好消息是,這種行爲現在已經記錄在案! :) –

相關問題