2011-08-22 443 views
9

似乎BIGINT是MySql上可用的最大整数,对不对?当你需要mysql上大于20位数的整数时该怎么办?

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

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

这种情况下,使用这种或那种类型的选择背后的真正原因是什么?

+0

BIGINT被定义为8字节。 – mozillanerd

回答

18

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

你有这个限制的原因是,本机格式整数,可以通过底层硬件比较快的操作,而一些文本版本(倾向于)需要一次要处理一个数字。

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

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

+0

哪个是最好的'ORDER'和'WHERE'语句? (具有正确结算的指数)。例如'SELECT column1 FROM tableA WHERE mybigint> N ORDER BY date LIMIT 100000'。在这种情况下,用于分页结果。 –

+0

@Keyne,十进制值可以正常工作,但可能会比原始整数类型慢。速度等级可能是各种原始积分,小数,零对齐变量和不合理的变量(从最快到最慢),但你不应该相信网络上的某些yobbo的建议,即使我:-)测量,猜猜。然后使用提供您所需范围的最快速度。具体而言,如果您需要80位数字,请使用对齐的变量(例如,将42存储为“0000000000 ... 000000042”)。 ... – paxdiablo

+0

...对于25位数字,可能是十进制(25,0)。对于19位数字,bigint。等等。您的模式不会永远锁定。如果在某些时候需要从19位移动到25位数字,那么在这一点上从bigint到decimal进行更改,否则YAGNI原则可能适用。 – paxdiablo

3

您可以指定一个numeric(65,0),但如果你需要得到更大的,你需要一个varchar。

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

2

,如果你想存储效率达到最高可以存储大整数作为an arbitrary binary string

但是我不确定它是否值得,因为你必须在应用程序中处理超过64位的整数,这也是not the thing you want to do,没有一个强有力的理由。

更好的让事情变得简单,并使用varchar

-4

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

+4

字节,而不是数字。 – yan

相关问题