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

在MySQL中存储二进制数组

  •  4
  • Teifion  · 技术社区  · 17 年前

    我有一个名为A、B…X、Y、Z的值数组。虽然表中有26列很有趣,但我不禁觉得有更好的方法。我考虑过用第一个表中的行的id值、数组中项目的id和布尔值创建第二个表,但这似乎很笨拙,也很令人困惑。

    有更好的办法吗?

    4 回复  |  直到 17 年前
        1
  •  6
  •   Marcus Downing    17 年前

    简短的回答,不。长的回答,这取决于。

    您可以通过多种方式存储二进制数据——滥用数字、使用binary或VARBINARY、使用BLOB或TINYBOB等。如果数据大小已知,BINARY类型通常比BLOB类型快。

    然而,关系数据库并不是为对二进制数据进行任何智能操作而设计的。在我曾经参与的一个项目中,有一个表,其中每条记录都有特定的二进制模式——存储为某种整数——搜索需要大量的and、OR、XOR和NOTs。它从来没有真正工作得很好,性能很差,它阻碍了整个项目的进行。回想起来,我会采取完全不同的方法。

    所以,如果你只是想把数据放进去,然后再把它拉出来,那太好了。如果你想用它来做任何聪明、艰难的事情。

    其他数据库供应商的情况可能不同。事实上,您是否考虑过使用其他东西来代替数据库?某种对象持久性?

        2
  •  2
  •   Lobstrosity    17 年前

    您可能的数组值是静态的吗?

    如果是这样,请尝试使用MySQL的SET数据类型。

        3
  •  1
  •   Can Berk Güder Pugalmuni    17 年前

    您可以尝试将其存储为TINYBLOB,甚至是未指定的INT,但您必须在代码中进行位掩码。

        4
  •  1
  •   Learning    17 年前

    您可以将其存储为字符串,并使用文本操作函数(重新)创建数组。