2017-09-26 14 views
0

mysql 데이터베이스의 자동 Increment ID에 BigInt (20) 데이터 유형을 사용하고 있습니다. 정수 값이 너무 큰 경우 어떻게 자바 스크립트의 숫자 정밀도로 처리 할 수 ​​있습니다, 그것은 삽입하고 어떤 숫자 값을 읽을 수 있도록하지 않습니다. 어떻게 이것을 할 수 있습니까? 큰 정수 라이브러리에 대해 읽어하지만 난 결과를노드 j에서 매우 큰 숫자를 처리하는 방법은 무엇입니까?

예를 기대하지 않습니다 -

var x = 999999999999999999999999999999999999999; 
나는 그것의 지수 값 및 쓰레기 값을 사용하지 않고 같은 번호를 인쇄 할 수있는 방법

?

내가 그

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

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

예 2와 같은 시도 : - 나는 마지막으로 삽입 된 ID를 가져올 경우

, 그럼 어떻게

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/ko/integer-types.html .. –

+2

@robertklep는 좋은 대답을 제공합니다. 나는 또 다른 생각을 추가하고 싶다. 구체적인 환경에 따라 자바 스크립트는 최대 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 어떻게 이런 becoze를 수행 할 수 있습니다 아주 큰 숫자로 데이터를 보내고 있습니다. 그래서 이것을 sttring으로 전달할 수 있습니다. –

+0

@VIKASKOHL 내 편집을 참조하십시오. 아마도 MySQL 드라이버에서'BIGINT' 지원을 활성화해야 할 것입니다. – robertklep