我的目标是将一个256位对象(实际上是一个位域)存储到MySQL中,并能够进行一些按位操作和比较。
理想情况下,我会使用BIT(256)作为类型,但MySQL将位域限制为64位。
我建议的解决方案是为这个字段使用二进制字符串BINARY(32)
类型,我可以存储我的对象,但我无法对它们进行操作。
我的表结构是
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`bin` binary(32) NOT NULL,
PRIMARY KEY (`id`)
)
然后是查询
SELECT
bit_count( bin ) AS fullBin,
bit_count( substring( bin, 0, 4 ) ) AS partialBin
FROM test
总是返回0,因为它不会将我的二进制字符串转换为子字符串,而不是将bit_count用于操作的数字。
我正在寻找一种方法来将二进制字符串的一部分提取为BIGINT
或我可以操作的其他类型(我只需要按位AND
和bit_count()
操作)。
性能方面,我更喜欢不涉及创建字符串并解析它们的解决方案。
我也接受任何将我的数据存储为另一种类型的提议,但是将我的bin列拆分为4个类型为BIT(64)的明显解决方案不是一个选项,因为我必须保留表命名结构。