mysql按位AND值超过64位

时间:2013-08-23 08:44:48

标签: mysql

我有桌子:

+----------------+--------------+
| name (varchar) | flags (text) |
+----------------+--------------+
| A              | 100001000000 |
| B              | 100001000000 |
| C              | 000001000000 |
| D              | 000001000000 |
+----------------+--------------+

Flags将二进制值长于64位存储为TEXT。

我想这样做:

SELECT name, conv(flags, 2, 2) & conv('100000000001', 2, 2) FROM users; 

应返回:

+----------------+--------------+
| name (varchar) | flags (text) |
+----------------+--------------+
| A              | 1            |
| B              | 1            |
| C              | 0            |
| D              | 0            |
+----------------+--------------+

flag > 2^64-1 1时我总是conv因为2^64-1总是返回{{1}}

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:-1)

你不能。 CPU工作在32/64位模式。 &安培;是一个高级操作员,将转换为低级别组件" AND" (CPU指令)

所以按位运算符如& 〜<< >> ....总是限制在32/64位。 在MySQL中,按位运算符限制为64位,MySQL中的VM(虚拟机)将进行转换,因此按位运算符也可以在32位系统上运行,但它应该比64位系统慢,因为需要更多指令。

如果您想处理标记,请在您的应用程序中执行此操作,但请等待相同的问题,以便重新考虑您的想法和结构。

答案 1 :(得分:-1)

this可能会有所帮助......我并没有详细阅读整篇文章,但这个想法是这样的:

创建一个表示所有可能屏蔽值的数字表。 将掩码存储为字符串,并将其与您的数字表子串一次进行比较。

这可能不是一个很好的解释,所以我鼓励你阅读链接。 here更多的是关于使用同一作者的数字表。