在mysql中使用bitwise一个大数字

时间:2013-01-02 20:30:06

标签: mysql bit-manipulation

我需要存储提供商名称以及他们能够提供服务的国家/地区。有92个县。而不是存储多达92行,我想存储2 ^ 91,所以如果它们只提供在1和2县,我会存储3。

我遇到的问题是最大的数字是2475880078570760549798248448,这对于最大的BigInt来说太大了。

在过去,当我的选项数量较少时,我已经能够做到......

SELECT * FROM tblWhatever WHERE my_col & 2;

如果my_col存储了2,3,6等(第2位的任何内容),则会找到它。

我想我不确定两件事......如何存储以及如何以非INT方式存储的方式进行查询。

1 个答案:

答案 0 :(得分:1)

您可以使用BINARY(13)作为数据类型来存储最多94位。但MySQL按位运算符仅支持64位的BIGINT

因此,如果您想使用按位运算符,则必须将您的县位域存储在两个BIGINT列中(或者可能只有一个BIGINT和一个INT),并且在应用程序中代码可以找出要搜索的两列中的哪一列。这似乎很尴尬。

但是,我会指出一个性能考虑因素:使用按位运算符进行搜索效率不高。您无法使用索引进行搜索,因此每个查询都被强制执行表扫描。随着数据的增长,这将变得越来越昂贵。

与使用LIKE '%word%'搜索子字符串或搜索当月某一天的所有日期相同的问题。

所以我建议将每个县存放在一个单独的行中。您不必为每个服务提供商存储92行 - 您只需存储与其服务的县数相同的行数。没有一行表示该县没有服务。