在我的情况下,每个“项目”都有一个属性,或者没有。属性可以是几百个,所以我需要每个项目最多1000个真/假比特。
有没有办法将这些位存储在项目的一个字段中?
答案 0 :(得分:3)
我宁愿选择以下内容:
Properties
ID, Property
1, FirsProperty
2, SecondProperty
ItemProperties
ID, Property, Item
1021, 1, 10
1022, 2, 10
然后,通过查询任何特定项目,可以轻松检索设置或未设置的属性。
答案 1 :(得分:3)
如果您正在寻找一种以可搜索的方式执行此操作的方法,那么不会。
一些可搜索的方法(涉及多于1列和/或表):
如果您不需要它可搜索,那么您需要的是在将数据放入数据库之前序列化数据的方法,并在将其拉出时对其进行反序列化,然后使用char或varchar列。
答案 2 :(得分:0)
最糟糕的是你必须使用char(1000)[ynnynynnynynnynny ...]等。如果你愿意打包它(例如,十六进制也不是太糟糕)你可以使用char(64)[十六进制字符]来完成它。
如果它小于64,那么SET类型将起作用,但似乎这还不够。
你可以使用二进制类型,但这是为电影等东西设计的。所以我不会。
所以是的,似乎你最好的选择是将它打包成一个字符串,然后存储它。
应该注意的是,VARCHAR会浪费空间,因为您确实知道数据将占用多少空间,并且可以精确地分配它。 (有固定宽度的行是一件好事)
答案 3 :(得分:0)
严格来说,您可以使用以下方法完成此任务:
$bools = array(0,1,1,0,1,0,0,1);
$for_db = serialize($array);
// Insert the serialized $for_db string into the database. You could use a text type
// make certain it could hold the entire string.
// To get it back out:
$bools = unserialize($from_db);
尽管如此,我强烈建议您考虑其他解决方案。
根据用例,您可能会尝试创建一个“item”表,该表与“attributes”表中的值具有多对多关系。这将是公共实体属性值数据库设计模式的标准实现,用于存储关于公共对象集的数据的可变点。 p>