在MySQL中存储二进制字符串

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

一旦使用按位运算符将选项转换为二进制,我们最终会得到10000或10010之类的选项,这一切都很好.这样做可以让我们继续添加选项,但无需重新编写哪个值,10010& (1 << 4)我知道我们已经开启了一些东西. 但问题是将这些数据存储在我们的MySQL表中.我已经尝试了几种字段类型,但它们都没有允许我执行查询,例如

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

建议?

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

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'

转载注明原文:在MySQL中存储二进制字符串 - 代码日志