我试图在数据库中存储不同的多重选择字段状态。
所以一个选择列表是:

<option value="1">a1</option>
<option value="2">a2</option>
<option value="4">a3</option>
<option value="8">a4</option>

我想在没有第二个(标准化)表的情况下尝试这个。所以我想到了添加选项值并将它们保存在数据库中。这样我就可以读出它们,转换它们并搜索2个值的幂。
问题是在数据库中搜索时。假设有人在搜索a1。这将是1,但也是3,因为它是a1和a2的组合。
所以这有点让人困惑。现在我试图存储二进制的值,比如101,并根据它计算十进制的值。搜索a1或a2时,我必须搜索(二进制)1和11。我不知道如何匹配这个,我是舒尔有一个更好的办法,对吗?

最佳答案

您使用的是所谓的abit-field;这意味着您必须使用按位运算符/函数来处理数据。
11.11.1. Bit Functions
例如,要选择设置了“1”位的行,必须使用如下方法:

select *
from your_table
where (your_field & 1) = 1

要测试第三个位(即与值4对应的位,即1<<2),可以使用:
select *
from your_table
where (your_field & 1<<2) = 1

附带说明:当使用这种计算时,MySQL必须进行一次完整的扫描(即遍历表中的每一行)以找到那些符合条件的。。。如果你有很多台词的话,这可能对表演不太好。
作为一个快速演示:
mysql> select (4 & 1<<2);
+------------+
| (4 & 1<<2) |
+------------+
|          4 |
+------------+

以及
mysql> select (3 & 1<<2);
+------------+
| (3 & 1<<2) |
+------------+
|          0 |
+------------+

关于mysql - 在MySQL中存储和Matchig二进制数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2325766/

10-13 07:45
查看更多