我有一个关于在 sql 中存储按位标志的问题。我有许多状态标志,我想将它们存储在 SQL smallint 字段中。所以一个 smallint 可以表示 -32768 到 32767。
如果我想使用所有 32 位来存储布尔值,我该如何引用这些位。例如。如果我想存储构成数字 1 的位,我通常会在 LSB 中看到 31 个零和一个 1。该序列会等同于我的 smallint 字段中的值吗?MSB 中的 1 和所有其他位中的 0 呢?也许有更好的方法在 SQL 中存储和查询按位数据。
提前致谢。
我有一个关于在 sql 中存储按位标志的问题。我有许多状态标志,我想将它们存储在 SQL smallint 字段中。所以一个 smallint 可以表示 -32768 到 32767。
如果我想使用所有 32 位来存储布尔值,我该如何引用这些位。例如。如果我想存储构成数字 1 的位,我通常会在 LSB 中看到 31 个零和一个 1。该序列会等同于我的 smallint 字段中的值吗?MSB 中的 1 和所有其他位中的 0 呢?也许有更好的方法在 SQL 中存储和查询按位数据。
提前致谢。
使用位数据类型?您需要的每个标志一个
SQL Server 根据需要将位列打包成尽可能多的字节
数据库引擎还将为您处理所有位掩码等您
所看到的都是离散位值
那么...为什么要自己动手?
理想的解决方案是使用 32 个独立的 TinyInt 字段。TinyInt 支持 0-255 的值。如果您尝试使用单个字段并进行位处理,您将失去索引任何这些标志的能力,就像您使用位类型字段时一样。