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

SQL Server:varbinary还是int来存储位掩码?

  •  11
  • aleemb  · 技术社区  · 15 年前

    在性能或灵活性方面,使用int与varbinary存储位掩码有什么好处吗?

    出于我的目的,我将总是在这些位掩码上进行读取(没有写入或更新)。

    4 回复  |  直到 15 年前
        1
  •  15
  •   Ronald Wildenberg    11 年前

    你绝对应该使用 INT (如果您需要32个标志)或 BIGINT (用于64个标志)。如果您需要更多的标志,可以使用 BINARY (但您可能还应该问自己,为什么在应用程序中需要这么多标志)。

    此外,如果使用整型,则可以使用标准 bitwise operators 不需要将字节数组转换为整型。

    如果你需要更多的标志并且必须使用 二元的 您将失去对位运算符的本机支持,因此很容易支持检查标志值。我可能会将检查标志值移到客户机应用程序中,但如果您对T-SQL编程感到满意,那么这也是一个选项。如果你使用C你有一个 BitArray 用必要的操作初始化,在Java中有一个 BitSet 班级。

        2
  •  6
  •   ahains    15 年前

    通常认为最好使用一组位列而不是位掩码。他们会被打包在一起,所以他们不会占用更多的空间。尽管我总是使用int或bigint列来避免所有的列名键入。但使用IntelliSense,我可能会使用位列。

        3
  •  2
  •   ChrisLively    15 年前

    好吧,考虑到int的存储空间较小,而且通常使用varbinary要容易一些,我不知道为什么要使用varbinary。

        4
  •  1
  •   Rick    15 年前

    我通常同意@hainstech关于使用位字段的回答,因为您可以显式地命名每个位字段以指示它应该存储什么。然而,我还没有看到一种实用的方法来进行位域的位掩码比较。使用SQL Server的位运算符(&、等…)很容易发现是否设置了一系列标志。对于大量的位字段,使用相等运算符可以完成更多的工作。