在mysql上需要大于20位的整数时该怎么办?

时间:2011-08-22 02:25:36

标签: mysql int varchar bigint

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

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

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

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

4 个答案:

答案 0 :(得分:24)

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

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

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

或者,您可以查看范围较大但精度较低的浮点数,或者十进制数,它们应该能够为您提供65位数的整数值,其中decimal(65,0)为列类型。< / p>

答案 1 :(得分:4)

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

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

答案 2 :(得分:2)

如果您想要最大的存储效率,可以将大整数存储为an arbitrary binary string

但是我不确定它是否值得,因为你还需要在应用程序中处理超过64位的整数,这也是not the thing you want to do没有充分理由。

更好地保持简单并使用varchar

答案 3 :(得分:-5)

BIGINT的定义限制为8位数。 DECIMAL类型中的最大位数为64.必须使用VARCHAR存储更大精度的值,并注意不存在此类值的直接数学。