2017-09-26 86 views
0

我正在使用BigInt(20)數據類型在mysql數據庫中自動增加id。 當整數值是如此之大,那麼我怎麼處理這個javascript數的精度後,它不會允許插入和讀取任何數值。那麼我怎麼能做到這一點。閱讀關於大整數庫 但我不會期望的結果如何在節點js中處理非常大的數字?

例子: -

var x = 999999999999999999999999999999999999999; 

我怎麼能打印照片,無需使用其指數值和任何垃圾值相同數量?

我想這樣的

var BigNumber = require('big-number'); 

var x = new BigNumber(999999999999999999999999999999999999999, 10); 
console.log(x); 

例2: -

如果我得到最後插入的標識,那我該怎麼處理這個值

connection_db.query('INSERT INTO tableName SET ?', tableData, 
    function (error1, results1, fields1) { 
    error1){ 
     // Db error 
     }else{ 
     var lastInserted = new BigNumber(results1.insertId); 
     console.log(lastInserted);// still wrong value 
      } 

    }); 
+1

不要認爲BIGINT(20)會生成一個20位數的整數。(20)僅適用於mysql的zerofull函數...關閉BIGINT的最小值和最大值在這裏https://dev.mysql。 com/doc/refman/5.5/en/integer-types.html .. –

+2

@robertklep提供了一個很好的答案。我想補充一點想法。取決於具體的環境,JavaScript爲您提供「安全整數」,最高爲2^53 - 1。MySQL的BIGINT是(取決於您的安裝)64位值。所以,如果2^53 - 1(= 9007199254740991)足夠滿足您的需求,那麼您可以使用這種組合(當然要考慮到您的界限)。 – iquellis

回答

3

只能通過/節目像這樣的大數字字符串

var BigNumber = require('big-number'); 

var x = new BigNumber('999999999999999999999999999999999999999', 10); 
console.log(x.toString()) 

但是,最後,MySQL驅動程序是如何處理這種大數據的,因爲它必須考慮到Number.MAX_SAFE_INTEGER

例如,mysql模塊具有與處理BIGINT有關的各種選項(supportBigNumbersbigNumberStrings)。

+1

值得澄清的是:如果您的應用程序需要14或15位以上的整數值,那麼如果您嘗試使用Javascript編寫應用程序,那麼您將面臨**世界的痛苦**。如果可以的話,避免它。 –

+0

@robertklep我怎麼能這樣執行,因爲有些人發送的數據是非常大的數字,所以我怎麼能通過這個作爲一個sttring –

+0

@VIKASKOHLI看到我的編輯。您可能必須在MySQL驅動程序中專門啓用'BIGINT'支持。 – robertklep