Jam*_*mes 6 mysql binary flags bit-manipulation options
我为我们的管理中心开发了一个小型二进制标志系统.它允许我们设置项目以分配多个选项,而不必存储具有多个字段的表.
一旦使用按位运算符将选项转换为二进制,我们最终会得到10000或10010之类的选项,这一切都很好.这样做可以让我们继续添加选项,但不必重写哪个值,10010&(1 << 4),我知道我们已经开启了一些东西.
但问题是将这些数据存储在我们的MySQL表中.我已经尝试了几种字段类型,但它们都没有允许我执行查询,例如
SELECT * FROM _table_ x WHERE x.options & (1 << 4)
Run Code Online (Sandbox Code Playgroud)
建议?
要检查是否设置了位,您的查询需要是:
SELECT * FROM _table_ x WHERE x.options & (1 << 4) != 0
Run Code Online (Sandbox Code Playgroud)
并检查它是否未设置:
SELECT * FROM _table_ x WHERE x.options & (1 << 4) = 0
Run Code Online (Sandbox Code Playgroud)
更新:以下是设置单个位的方法:
UPDATE table SET options = options | (1 << 4)
Run Code Online (Sandbox Code Playgroud)
要清除单个位:
UPDATE table SET options = options &~ (1 << 4)
Run Code Online (Sandbox Code Playgroud)
您还可以使用二进制字符串一次性设置它们:
UPDATE table SET options = b'00010010'
Run Code Online (Sandbox Code Playgroud)