MySQL-mysql bit 操作的问题
mysql数据表的一个字段为bit类型,8位,想做逻辑运算,SELECT的结果是OK的,但是update出问题,请教是怎么回事?
select BIN(CONVERT(market_attribute,BINARY) ^ b'11001101'),market_attribute from product
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
修改语句改为:
UPDATE product set market_attribute = market_attribute ^ b'11001101' ;
即可。
通过下边的查看修改后的数据:
select bin(market_attribute) from product
而不是
select BIN(CONVERT(market_attribute,BINARY) ^ b'11001101'),market_attribute from product
举个例子说明:
比如 market_attribute 有两行数据分别为:
b'00000001' -- 十进制的 1
b'00000010' -- 十进制的 2
执行你查询的语句后结果为(select market_attribute ^ b'11001101'):
00000001 ^ 11001101 = 11001100
00000010 ^ 11001101 = 11001111
执行修改语句后的值也确实就是上边写的。
修改后再继续执行你的语句查看(select market_attribute ^ b'11001101'):
11001100 ^ 11001101 = 00000001
11001111 ^ 11001101 = 00000010
发现值没有改,还是 00000001 与 00000010 ,其实已经改了。
另外,bit 为 8 位,与另外一个 小于等于 8 位的bit值 做异或运算,结果是不会超过 11111111(255)
因为bit其实是属于数值型的(8位的取值范围是0-255),赋值的话,要赋值数值型
UPDATE product set market_attribute = CONVERT(BIN(CONVERT(market_attribute,BINARY) ^ b'11001101'), UNSIGNED);