【发布时间】:2018-11-12 20:55:07
【问题描述】:
我目前正在考虑一种将复选框值(真/假)存储在数据库中的方法,而无需为每个复选框使用布尔列。有没有办法将它们存储在一个字节中,其中包含六个复选框的信息?
例如:
* 复选框 1 到 6 全部未选中将是 00000000
* 复选框 1 到 6 全部选中将是 00111111
* 复选框 1 选中,其余未选中将是 00000001
* 选中复选框 3 和 4,其余未选中将是 00001100
* 等等。
编辑前:“最后将有一个字节列,并且对于每一行,选中/未选中复选框的不同组合。”
编辑后:哦,我知道我一直不清楚。我并不是说每个可能的复选框组合都存储在表中的不同行中,就像查找表一样。更像是,整个表格包含来自公式中用户条目的信息,并且用户选中的复选框只是表单的一个元素(db 行的一列)。因此,表单(一行)的每个用户条目可以在复选框列中包含不同的字节。但是如果更多的用户选择相同的复选框,那么他们行中的字节当然会看起来相同。
作为一堆布尔列(每个复选框一个)的替代方案是否有意义?
有没有更好的方法来处理数据库中的复选框值?
有没有办法在 C# 中手动设置字节的每一位?我似乎找不到有关如何执行此操作的解释。
【问题讨论】:
-
当然,flagset enum 存储为字节、int 或 bigint,和/或一些 bit manipulation
-
如果将数据拼接成一个值,为什么会比“一堆”值更好?
-
你可能会在更少的空间需求中获得什么,你将失去几乎所有其他system quality attribute
-
您可以使用
System.Collections.BitArray或(这里可能更好)System.Collections.Specialized.BitVector32等类型。 -
@dlatikay 谢谢,我会查一下。
标签: c# database checkbox byte bit