在MySQL中存储二进制字符串

时间:2011-04-27 08:36:46

标签: mysql binary bit-manipulation options flags

我为我们的管理中心开发了一个小型二进制标志系统。它允许我们设置项目以分配多个选项,而不必存储具有多个字段的表。

一旦使用按位运算符将选项转换为二进制,我们最终会选择10000或10010这样的选项。这样做可以让我们继续添加选项,但无需重新编写哪个值,10010&amp; (1 <&lt; 4)我知道我们已经开启了一些东西。

然而问题是将这些数据存储在我们的MySQL表中。我已经尝试了几种字段类型,但它们都不允许我执行查询,例如,

SELECT * FROM _table_ x WHERE x.options & (1 << 4)

建议?

2 个答案:

答案 0 :(得分:3)

要检查是否设置了一个位,您的查询需要是:

SELECT * FROM _table_ x WHERE x.options & (1 << 4) != 0

并检查是否未设置:

SELECT * FROM _table_ x WHERE x.options & (1 << 4) = 0

更新:以下是设置单个位的方法:

UPDATE table SET options = options | (1 << 4)

清除个别位:

UPDATE table SET options = options &~ (1 << 4)

您也可以使用二进制字符串一次性设置它们:

UPDATE table SET options = b'00010010'

答案 1 :(得分:1)

SET field type在这里有用吗?