代码之家  ›  专栏  ›  技术社区  ›  Mike

mysql中二进制数据的存储与匹配

  •  1
  • Mike  · 技术社区  · 16 年前

    所以一个选择列表是:

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

    我想在没有第二个(标准化的)表的情况下尝试这个。所以我想到了添加选项值并将它们保存在db中。这样我就可以读出它们,转换它们,搜索2的幂。

    问题是在数据库中搜索时。假设有人在搜索a1。这将是1,但也是3,因为它是a1和a2的组合。

    所以这有点混乱。现在我正在尝试存储二进制值,比如101,并将十进制值与之对应。搜索a1或a2时,我必须搜索(二进制)1和11。我不知道如何匹配,我是舒尔,有更好的方法,对吗?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Pascal MARTIN    16 年前

    你用的是所谓的 bit-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> select (4 & 1<<2);
    +------------+
    | (4 & 1<<2) |
    +------------+
    |          4 |
    +------------+
    

    以及

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