似乎BIGINT
是MySQL上可用的最大整数,对吗?
例如,当您需要存储BIGINT(80)时该怎么办?
为什么在某些情况下,比如Twitter API文档中的某个地方,他们建议我们将这些大整数存储为varchar
?
选择使用一种类型而不是另一种类型背后的真正原因是什么?
答案 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存储更大精度的值,并注意不存在此类值的直接数学。