cmp*_*ral 5 mysql string flags bit-manipulation bitwise-operators
我需要在 MySQL 表中存储一些用户记录的标志(我使用的是 InnoDB):
---------------------------
| UserId | Mask |
| -------------------------
| 1 | 00000...001 |
| 2 | 00000...010 |
---------------------------
Run Code Online (Sandbox Code Playgroud)
标志的数量大于 64,所以我不能使用 BIGINT 或 BIT 类型来存储值。
我不想使用多对多关联表,因为每个用户可以有多个配置文件,每个配置文件都有自己的一组标志,而且它会很快变大。
所以,我的问题是,是否可以将这些标志存储在 VARCHAR、BLOB 或 TEXT 类型的列中,并且仍然对它们进行按位运算?如果是,如何?
现在我只需要一个操作:给定一个掩码 A,其中 X 位设置为 1,用户至少将那些 X 位设置为 1。
谢谢!
编辑
对于阅读本文的任何人,我已经找到了解决方案(至少对我而言)。我在掩码字段中使用 VARCHAR,在搜索特定掩码时,我使用以下查询:
select * from my_table where mask like '__1__1'
Run Code Online (Sandbox Code Playgroud)
将返回第 3 位和最后一位设置为 on 的每条记录。“_”符号是“任何单个字符”的 SQL 占位符(可能仅限于 mySQL?)。
就速度而言,现在做得很好,当我的用户群增长时必须稍后检查。
无论如何,感谢您的投入。当然,欢迎其他想法。
| 归档时间: |
|
| 查看次数: |
1536 次 |
| 最近记录: |