我需要在MySQL表中存储用户记录的一些标志(我正在使用InnoDB):
---------------------------
| UserId | Mask |
| -------------------------
| 1 | 00000...001 |
| 2 | 00000...010 |
---------------------------
标志数大于64,因此我不能使用BIGINT或BIT类型来存储该值。
我不想使用多对多关联表,因为每个用户可以拥有多个配置文件,每个配置文件都有一组标志,并且它会很快变大。
所以,我的问题是,是否可以将这些标志存储在VARCHAR,BLOB或TEXT类型的列中,并仍然对它们进行按位操作?如果有,怎么样?
现在我只需要一个操作:给定一个X位设置为1的掩码A,用户至少将那些X位设置为1。
谢谢!
修改
对于读过这篇文章的人,我找到了一个解决方案(至少对我而言)。我正在使用VARCHAR作为掩码字段,当搜索特定掩码时,我使用此查询:
select * from my_table where mask like '__1__1'
将返回将第3位和最后一位设置为on的每条记录。 “_”符号是“任何单个字符”的SQL放置器(仅限mySQL,可能?)。
就速度而言,现在做得很好,将在我的用户群增长时检查。
无论如何,感谢您的意见。当然,欢迎其他想法。