2013-02-23 41 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

相关问题