我为我们的管理中心开发了一个小型二进制标志系统。它允许我们设置项目以分配多个选项,而不必存储具有多个字段的表。
一旦使用按位运算符将选项转换为二进制,我们最终会选择10000或10010这样的选项。这样做可以让我们继续添加选项,但无需重新编写哪个值,10010&amp; (1 <&lt; 4)我知道我们已经开启了一些东西。
然而问题是将这些数据存储在我们的MySQL表中。我已经尝试了几种字段类型,但它们都不允许我执行查询,例如,
SELECT * FROM _table_ x WHERE x.options & (1 << 4)
建议?
答案 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在这里有用吗?