2013-07-23 20 views
1

我有一個應用程序,我正在建設,我必須保存一些頁面的設置。我決定將它以二進制數據格式保存在mysql中。我收到了很多複選框。所以我們可以說我有這種形式在mysql中的存儲設置

<form> 
<input type="text" value="some text" id="text"> 
<input type="checkbox" name="checkboxes1"> 
<input type="checkbox" name="checkboxes2"> 
<input type="checkbox" name="checkboxes3"> 
</form> 

的我有類似這樣的一個設置頁10頁。我認爲我可以以二進制數據的形式將這些數據寫入mysql數據庫。可以說第一個和最少一個被選中,所以我寫在mysql 101。什麼樣的數據類型可以選擇BLOBVARCHAR或其他什麼?

+0

http://dev.mysql.com/doc/refman/5.6/en/integer-types.html我會爲每個複選框值表明不同列。如果一個值是值得存儲的,它可能有一個特定的目的,並且值得一個比'SUBSTR(OptionString,3,1)'更具描述性的名稱。 –

+0

需要存儲的值只會被檢查或不被檢查,所以如果有一點,它會變成一堆。 – melanholly

+0

聽起來不錯@melanholly - 我只是在扮演惡魔的倡導者,以防萬一:) –

回答

3

存儲按位數據的最有效方式是使用整數數據類型。在你的情況下,每個複選框將代表一個整數的一位。例如,如果被設定的複選框:

checkbox 1 checked 
checkbox 2 unchecked 
checkbox 3 checked 

這將代表5(1 * 2^2 + 0 * 2^1 + 1 * 2^0)。使用下面的類型取決於你需要存儲的位數的整數:

tiny int: 8 bits 
small int: 16 bits 
medium int: 24 bits 
int:   32 bits 
big int:  64 bits 

更多信息

+0

因此,我可以將數據轉換爲整數'bindec'並將其存儲,然後我可以用decbin解碼,然後處理它 – melanholly

0

您可以創建一個默認設置表,然後創建一個對應的表,用於存儲各個用戶的設置。您可以使用bittinyint數據類型來指示選項是關閉/打開。

settingDefault 
settingId setting default 
1   loadImages 1 
2   loadAds 0 

settingUser 
userId settingId value 
1  1   0

這裏的好處是,你只需要存儲用戶設置,如果他們是從默認不同

+0

這不是一種選擇,因爲我對我的所有用戶都有相同的設置。謝謝您的回答。 – melanholly