15

似乎BIGINT是 MySQL 上可用的最大整数,对吧?

例如,当您需要存储 BIGINT(80) 时该怎么办?

为什么在某些情况下,比如 Twitter API 文档中的某个地方,他们建议我们将这些大整数存储为varchar?

选择使用一种类型而不是另一种类型的真正原因是什么?

4

4 回答 4

31

大整数实际上并不限于 20 位,它们仅限于可以用 64 位表示的数字(例如,99,999,999,999,999,999,999尽管该数字是 20 位长,但它不是有效的大整数)。

您有此限制的原因是,底层硬件可以相对快速地操作本机格式整数,而数字的文本版本(往往)需要一次处理一个数字。

如果您想要一个大于最大 64 位无符号整数的数字,18,446,744,073,709,551,615那么您需要将其存储为varchar(或其他文本字段),并希望您不需要对其进行太多数学操作。

或者,您可以查看具有较大范围但精度较低的浮点数,或者应该能够为您提供 65 位整数值的十进制数,decimal(65,0)作为列类型。

于 2011-08-22T02:32:48.940 回答
6

您可以指定 a numeric(65,0),但如果您需要变大,则需要一个 varchar。

选择一个而不是另一个的原因是使用、效率和空间。使用 int 比 bigint 更有效,或者,我相信,如果您需要对其进行数学运算,则使用 numeric。

于 2011-08-22T02:33:56.253 回答
2

如果您想要最大的存储效率,您可以将大整数存储为任意二进制字符串。

但我不确定这是否值得,因为您还必须在应用程序中处理超过 64 位整数,这也不是您没有充分理由想要做的事情。

最好保持简单和使用varchar

于 2011-08-22T02:41:45.593 回答
-6

BIGINT 根据定义限制为 8 位。DECIMAL 类型的最大位数为 64。您必须使用 VARCHAR 来存储精度更高的值,并注意这些值没有直接的数学运算。

于 2011-08-22T02:43:02.630 回答