2013-02-23 70 views
1

有一個數據庫,其中一個表的字段使用二進制位作爲標誌。因此,根據哪些標誌被切換,您可以擁有各種各樣的值,因此單獨查看這些值無濟於事。即大於8的值並不意味着8的值正在使用(例如17是16 + 1)。如何在MySQL的多個記錄的字段中添加一個位值

考慮到這一點,是否有更新多個記錄的方法來設置或取消設置特定字段的位(例如值爲8)?有些記錄可能會設置它,另一些則不會,所以不要只是簡單地添加(或減去)8。

回答

0

使用BIT functions。要設置位1:

update your_table 
set bit_field = bit_field | b'0001' 

取消設置位1:

update your_table 
set bit_field = bit_field & b'1110' 

SQLFiddle demo

+0

所以|添加位和&只保留匹配位(設置爲1)? – Wolfie 2013-02-23 23:28:30

+0

@Wolfie正確。 – 2013-02-23 23:32:44

+0

看着你提供的鏈接,如果不喜歡,將會是一個更好的選擇? *將您的問題標記爲自您首先回答以來的答案。謝謝。 – Wolfie 2013-02-23 23:35:17

2

可以使用位或|和AND &功能;

UPDATE myTable SET myValue = value | 8; -- set bit 3 
UPDATE myTable SET myValue = value & ~8; -- clear bit 3 

(Very) simple SQLfiddle for testing

相關問題