MySQL-mysql bit 操作的问题

发布于 2016-12-09 16:52:20 字数 204 浏览 1287 评论 2

mysql数据表的一个字段为bit类型,8位,想做逻辑运算,SELECT的结果是OK的,但是update出问题,请教是怎么回事?

select BIN(CONVERT(market_attribute,BINARY) ^ b'11001101'),market_attribute from product

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

泛泛之交 2017-06-05 22:21:16

修改语句改为:

 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)

想挽留 2017-03-20 04:11:25

因为bit其实是属于数值型的(8位的取值范围是0-255),赋值的话,要赋值数值型

UPDATE product set market_attribute = CONVERT(BIN(CONVERT(market_attribute,BINARY) ^ b'11001101'), UNSIGNED);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文