mysql按字符串列的按位运算

时间:2012-10-15 01:12:58

标签: mysql string bit-manipulation bitwise-operators flags

我需要在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,可能?)。

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

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

0 个答案:

没有答案