2011-08-22 84 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

相關問題