5

我需要在 MySQL 表中存储一些用户记录的标志(我正在使用 InnoDB):

---------------------------
| UserId    | Mask        |
| -------------------------
| 1         | 00000...001 |
| 2         | 00000...010 |
---------------------------

标志的数量大于 64,所以我不能使用 BIGINT 或 BIT 类型来存储值。

我不想使用多对多关联表,因为每个用户可以拥有多个配置文件,每个配置文件都有其一组标志,并且它会很快变得太大。

所以,我的问题是,是否可以将这些标志存储在 VARCHAR、BLOB 或 TEXT 类型的列中,并且仍然对它们进行按位运算?如果是,如何?

现在我只需要一个操作:给定一个掩码 A,其中 X 位设置为 1,用户至少将这些 X 位设置为 1。

谢谢!

编辑

对于阅读本文的任何人,我都找到了解决方案(至少对我而言)。我使用 VARCHAR 作为掩码字段,在搜索特定掩码时,我使用以下查询:

select * from my_table where mask like '__1__1'

将返回第 3 位和最后一位设置为 on 的每条记录。“_”符号是“任何单个字符”的 SQL 占位符(也许只有 mySQL?)。

就速度而言,现在做得很好,稍后我的用户群增长时将不得不检查。

无论如何,感谢您的意见。当然,欢迎其他想法。

4

0 回答 0