0

我有一个关于在 sql 中存储按位标志的问题。我有许多状态标志,我想将它们存储在 SQL smallint 字段中。所以一个 smallint 可以表示 -32768 到 32767。

如果我想使用所有 32 位来存储布尔值,我该如何引用这些位。例如。如果我想存储构成数字 1 的位,我通常会在 LSB 中看到 31 个零和一个 1。该序列会等同于我的 smallint 字段中的值吗?MSB 中的 1 和所有其他位中的 0 呢?也许有更好的方法在 SQL 中存储和查询按位数据。

提前致谢。

4

2 回答 2

2

使用数据类型?您需要的每个标志一个

SQL Server 根据需要将位列打包成尽可能多的字节

  • 最多 8 = 1 个字节
  • 9-16 是 2 个字节
  • ...

数据库引擎还将为您处理所有位掩码等您
所看到的都是离散位值

那么...为什么要自己动手?

于 2013-02-20T15:25:00.843 回答
-2

理想的解决方案是使用 32 个独立的 TinyInt 字段。TinyInt 支持 0-255 的值。如果您尝试使用单个字段并进行位处理,您将失去索引任何这些标志的能力,就像您使用位类型字段时一样。

于 2013-02-20T15:28:59.630 回答