2009-04-30 66 views

回答

15

您應該使用INT(如果您需要32個標記)或BIGINT(對於64個標記)。如果你需要更多的標誌,你可以使用BINARY(但你也應該問自己爲什麼你的應用需要這麼多標誌)。

此外,如果您使用整數類型,則可以直接使用標準bitwise operators,而無需將字節數組轉換爲整數類型。

如果您確實需要更多標誌並且必須使用BINARY,您將失去對按位運算符的本地支持,因此很容易支持檢查標誌值。我可能會將檢查標誌值檢查到客戶端應用程序,但是如果您對T-SQL的編程感到滿意,那也是一種選擇。如果你使用的是C#,你有一個BitArray類的必要的操作,在Java中你有一個BitSet類。

+1

是的,還是事件小的類型像tiny int爲較小的位掩碼?我從來沒有使用過微小的int作爲位掩碼,但應該沒有問題。 int的工作很棒。 – 2009-04-30 23:10:35

+1

較小的面罩類型也是一個好主意。 – 2009-05-02 08:23:50

+0

我們如何使用varbinary,例如100個標誌? varbinary可以像int或bigint那樣靈活使用嗎?對兩個varbinary進行按位運算是不可能的。我們如何模仿int-flag行爲? – aldebaran 2013-12-17 11:22:51

2

嗯,考慮到int具有更少的存儲空間,並且通常更容易處理我不確定爲什麼要使用varbinary。

6

通常認爲使用一堆位列而不是位掩碼更好。他們會一起打包在頁面中,所以他們不會再佔用更多空間。儘管我似乎總是使用int或bigint列來避免所有的列名輸入......但是對於intellisense,我可能會使用位列。

1

我通常同意@ hainstech使用位域的答案,因爲你可以明確地命名每個位域來表明它應該存儲什麼。但是我還沒有看到用位域做位掩碼比較的實用方法。使用SQL Server的按位運算符(&,|等...)很容易找出是否設置了一系列標誌。對於大量的位域,等式運算符要做更多的工作。