是否可以在MySQL中高效地存储大的int?不像在bigint中那么大,更像是第1000个Catalan number左右,而且至少有数百个。更有可能,数千人。存储和加载值的速度是优先考虑的。
这些数字是使用Python的GMP包装器gmpy2创建的。所以,如果存储的数字可以以相同的格式访问,那就太好了,但是如果不能访问,我总是可以编写一个转换器。

最佳答案

我将mpz整数转换为Python字符串(对于v2)或字节(对于v3),并将其保存为mysql中的BLOB实体。下面是使用Python 2的相关gmpy2命令。

>>> import gmpy2
>>> gmpy2.mpz(1234)
mpz(1234)
>>> gmpy2.to_binary(mpz(1234))
'\x01\x01\xd2\x04'
>>> gmpy2.from_binary('\x01\x01\xd2\x04')
mpz(1234)
>>>

gmpy2.to_binary将任意gmpy2对象转换为二进制字符串。gmpy2.from_binary将把二进制字符串转换回gmpy2对象。对象的类型被编码为二进制字符串,因此不需要跟踪对象的类型。
免责声明:我维护gmpy2。

10-05 19:25