2010-10-14 91 views
24

看來我應該使用tinyint();但我不知道如何實現它?如何添加布爾字段到MySQL?

的問題是,什麼是你的建議,如果我需要有一個布爾字段在MySQL數據庫和PHP與

+0

布爾字段也可以被解釋爲1和0的這樣有一個tinyint字段將導致更快的數據庫。如果你更快地索引它。以下所有答案對您都是有價值的! @Felix @Matthew @Haim做得好 – 2010-10-14 07:43:41

+0

@etbal是的確,所有非常有幫助! – Trufa 2010-10-14 07:45:34

回答

43

是的,TINYINT(1)是要走的路...你也可以使用BOOL or BOOLEAN這是同義詞(所以它不會使差異)。

0評估爲false在PHP和1true(實際上,任何其它數目的比0計算結果爲true,但通常使用1)。

+1

謝謝非常有用,已經實施它! – Trufa 2010-10-14 07:50:26

+0

@Felix Kling沒有任何其他數字比0評估爲真http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html – 2011-08-20 19:50:30

+0

@Viswanathan:其實我在談論PHP情況下,而不是MySQL。 – 2011-08-20 19:53:11

2

你是正確的,因爲一般的解決辦法是tinyint(1)修改it's值。您可以使用BOOL簡稱:

CREATE TABLE example (
     flag BOOL 
     ); 
2

你有TINYINT(1)或位

插入0或1的選項,這個領域

看到這個帖子的差異:

Tinyint vs Bit

+0

感謝您的澄清! – Trufa 2010-10-14 07:43:25

4

我不喜歡bool,BIT,TINYINT(1)。因爲它們中沒有一個實際是布爾值。您可以查看以下鏈接的「爲什麼」:

http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html

我會更好地利用:ENUM(「假」,「真」)不爲空 - 爲數據類型。你可以從PHP傳遞'true'或'false'(作爲字符串)。它只需要1個字節來存儲它!

+0

爲什麼不用ENUM('0','1')而不是 – tormuto 2015-08-26 09:54:32

+2

實際上,字符串'false'在PHP中具有諷刺意味。 – jonbaldie 2015-12-06 20:24:29

+0

@tormuto是的,你可以。這將有助於在閱讀時在PHP中進行自動類型轉換。但是使用ENUM這樣做並不安全,因爲您可能忘記從PHP傳遞字符串。如果有人錯誤地聲明瞭ENUM('1','0'),會發生什麼情況?我看到很多代碼,如('是','否')。 – Muktadir 2015-12-25 23:05:37

0

我想既然你真的想執行一個布爾值在MySQL表字段(0,1)的約束,最好的射門被uning枚舉

CREATE TABLE table_name(
    boolean_field_name ENUM('0', '1') 
);