2012-06-13 94 views
0

我們對如何在MySQL數據庫中保存新引入的複選框值進行了一些討論。該複選框可以是'開'或'關',但有時根本不顯示。 我的想法是簡單地將狀態保存到BOOL NOT NULL字段。然後,我們有0或1。 我的同事然後說,想要包含NULL,所以我們可以看到沒有選擇。mysql中的複選框值

但我確實認爲BOOL字段不應包含NULL。你想要它,但是是真的還是假的,不是未知的。如果你真的想保存'未知'的額外狀態,那麼我會將該字段設置爲TINYINT,其中不包含selected = 0,selected = 1和unknown = 2。這也可以是ENUM字段。

您如何看待可能出現NULL的BOOL字段?

+0

我不使用NULL作爲布爾值。布爾值的默認值應該替換爲null。 – Tushar

回答

0

boolean字段不能超過2個值,布爾本身意味着「或或」條件就像On或Off,True或False。

1

這不是一個BOOL其中null是可能的,它只是一個狀態枚舉,其中

0: not selected 
1: selected 
2: unknown/hidden 

枚舉是實現你想要什麼,因爲這樣做,如果你的應用程序的行爲包括一個好辦法'隱藏/未知'狀態的複選框的值,那麼你的MySQL需要反映,否則你將開始黑客在未來。

+0

完全是我的想法,但我覺得奇怪的是,MySQL中的BOOL字段(這是簡單的TINYINT(0)的別名)可以具有NULL值。 MySQL中的SERIAL別名具有NOT NULL參數。 –

+0

在您的使用案例中,複選框值的'unknown'和'false'是否有區別?和in一樣,應用程序中'unknown'和'false'的行爲是否相同?如果它是相同的,那麼將'unknown'設置爲'false'(默認值)的布爾值true/false會有意義。 – Ryan

1

就我個人而言,我發現在BOOL字段中使用NULL沒有任何問題。就我而言,它是一種類似於任何其他類型的類型,可以正確地分配一個未知狀態。但是如果一個BOOL不能爲NULL,因爲它是通過'開'或'關'的定義,那麼我會認爲這個邏輯可以擴展到Ints。然後,一個Int不能是NULL,因爲它必須是一個數字。

基於這裏的其他答案,我明顯在這個少數。我應該重新考慮我的立場。