Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置和清除MySQL中存储为整数的多个位_Mysql_Bit Manipulation_Bits - Fatal编程技术网

设置和清除MySQL中存储为整数的多个位

设置和清除MySQL中存储为整数的多个位,mysql,bit-manipulation,bits,Mysql,Bit Manipulation,Bits,我有一个表,其中有一列“userExtraStatus”,类型为带符号整数 我正在为各种用户状态存储位 要设置位,我有一个查询 UPDATE publicUsers SET userExtraStatus = userExtraStatus |1024 |2048 |1 WHERE userID='1' 所有三位都已设置。列值=3073(1024+2048+1),在我看来这是正确的 如果我尝试取消设置任何位,例如“1024”,并保持其余位不变,则我正在使用查询

我有一个表,其中有一列“userExtraStatus”,类型为带符号整数

我正在为各种用户状态存储位

要设置位,我有一个查询

UPDATE 
    publicUsers 
SET 
    userExtraStatus = userExtraStatus |1024 |2048 |1 
WHERE 
    userID='1'
所有三位都已设置。列值=3073(1024+2048+1),在我看来这是正确的

如果我尝试取消设置任何位,例如“1024”,并保持其余位不变,则我正在使用查询

UPDATE 
    publicUsers 
SET 
    userExtraStatus = userExtraStatus |1024 &~ 2048 | 1 
WHERE 
    userID='1'
结果仍然是3073

预期结果:1025(即3073-2048)

是否缺少位运算符?

您需要使用它

SELECT ( 1024 | 2048 | 1 ) & ~2048
或者使用简单的减号

SELECT ( 1024 | 2048 | 1 ) - 2048
见演示

更新查询的示例用法
假设字段userExtraStatus已经包含
(1024 | 2048 | 1=3073)

UPDATE 
    publicUsers 
SET 
    userExtraStatus = (userExtraStatus) & ~2048
WHERE 
    userID='1'
因未发表评论而编辑


是否有一种方法可以混合设置和取消设置位的说明 在一个查询中?例如,如果我在一个表单中使用复选框 位-我不想检查特定位是否已设置-I 希望将其设置为导致查询
更新。。。设定状态
=状态|位1 |位2&~位3

这是可能的,但你需要像这样使用适当的括号

UPDATE ... SET status = ( status | bit1 | bit2 ) & ~bit3
可以通过以下方式取消设置多个位:

UPDATE ... SET status = ( status | bit1 | bit2 ) & ~( bit3 | bit4 )
这是可能的,但您需要使用适当的括号,如这样,您需要使用此括号

SELECT ( 1024 | 2048 | 1 ) & ~2048
或者使用简单的减号

SELECT ( 1024 | 2048 | 1 ) - 2048
见演示

更新查询的示例用法
假设字段userExtraStatus已经包含
(1024 | 2048 | 1=3073)

UPDATE 
    publicUsers 
SET 
    userExtraStatus = (userExtraStatus) & ~2048
WHERE 
    userID='1'
因未发表评论而编辑


是否有一种方法可以混合设置和取消设置位的说明 在一个查询中?例如,如果我在一个表单中使用复选框 位-我不想检查特定位是否已设置-I 希望将其设置为导致查询
更新。。。设定状态
=状态|位1 |位2&~位3

这是可能的,但你需要像这样使用适当的括号

UPDATE ... SET status = ( status | bit1 | bit2 ) & ~bit3
可以通过以下方式取消设置多个位:

UPDATE ... SET status = ( status | bit1 | bit2 ) & ~( bit3 | bit4 )

这是可能的,但您需要使用适当的括号,例如

是否有一种方法可以在一个查询中混合设置和取消设置位的指令?例如,如果我在表单中为每个位设置复选框-我不想检查特定位是否已设置-我希望设置它,从而导致查询更新。。。设置状态=状态|位1 |位2&~bit3@Didzis这是可能的,但您需要使用适当的括号,如so
UPDATE。。。设置状态=(状态|位1 |位2)和~bit3
通过
更新可以取消设置多个位。。。设置状态=(状态|位1 |位2)和|位3 |位4)
Ah-ha,太棒了!非常感谢。如果你能用这些评论更新你以前的答案,我会将其标记为接受。有没有一种方法可以在一个查询中混合设置和取消设置位的说明?例如,如果我在表单中为每个位设置复选框-我不想检查特定位是否已设置-我希望设置它,从而导致查询更新。。。设置状态=状态|位1 |位2&~bit3@Didzis这是可能的,但您需要使用适当的括号,如so
UPDATE。。。设置状态=(状态|位1 |位2)和~bit3
通过
更新可以取消设置多个位。。。设置状态=(状态|位1 |位2)和|位3 |位4)
Ah-ha,太棒了!非常感谢。如果你能用这些评论更新你以前的答案,我会将其标记为接受。