我有桌子:
+----------------+--------------+
| 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}}
我该如何解决这个问题?
答案 0 :(得分:-1)
所以按位运算符如& 〜<< >> ....总是限制在32/64位。 在MySQL中,按位运算符限制为64位,MySQL中的VM(虚拟机)将进行转换,因此按位运算符也可以在32位系统上运行,但它应该比64位系统慢,因为需要更多指令。
如果您想处理标记,请在您的应用程序中执行此操作,但请等待相同的问题,以便重新考虑您的想法和结构。
答案 1 :(得分:-1)