如何在MySQL中为多个记录的字段添加位值

3
有一个数据库,其中一个表使用二进制位作为标志。因此,根据切换的标志,您可以拥有各种值,因此仅查看值并不有用。即,大于8的值并不意味着使用了值8(例如,17是16 + 1)。
考虑到这一点,是否有一种方法可以更新多个记录以设置或取消设置某个字段的位(例如值为8)?有些记录可能已经设置了它,而其他记录可能没有,因此不想简单地添加(或减去)8。
2个回答

4

你可以使用按位或运算符|和按位与运算符&

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

(Very) simple SQLfiddle for testing.


3
使用BIT函数。要设置位1:
update your_table
set bit_field = bit_field | b'0001'

取消设置位 1:

update your_table
set bit_field = bit_field & b'1110'

SQLFiddle demo


所以 | 运算符会将两个二进制数的对应位相加,& 运算符则只保留匹配的位(设为 1)? - Wolfie
看了你提供的链接,对于取消设置,使用^是否更好?
  • 我将你的回答标记为最佳答案,因为你先回答了。谢谢。
- Wolfie
没关系,我试了演示链接,发现&是正确的方法。再次感谢。 :) - Wolfie
@Wolfie & ~ 是你想要使用的取消设置操作。^ 操作会每次翻转位,不能可靠地进行设置/取消设置。 - Joachim Isaksson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接