mysql - 在mysql中存储和匹配二进制数据

标签 mysql

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

<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。我不知道如何匹配它,我相信有更好的方法,对吧?

最佳答案

您正在使用所谓的 bit-field ;这意味着您必须使用按位运算符/函数来处理您的数据。

参见 11.11.1. Bit Functions .

例如,要选择设置了“1”位的行,您必须使用如下内容:

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

要测试 thirg 位 (即对应于值 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中存储和匹配二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2325766/

相关文章:

MySQL : InnoDB_Force_recovery = 1 leads to table in read only

mysql - 从服务器接收到的字段的未知字符集索引

mysql - 使用macports安装mysql出错

php - 信息不显示在数据库中。 XAMPP

javascript - 用于保存解析的 csv 公交路线数据的数据结构

mysql - 如何将数据从AWS IoT发送到Mysql数据库?

mysql - Yii2:如何设置 MySQL 语言环境

sql - 同一列可以对另一列有主键和外键约束吗

php - 在MySQL中连接一个 'blog'表和 'comments'表

java - 使用任何 SQL 查询的数据类型范围值