2017-12-29 3 views
1

10 진수 값 (DECIMAL (32, 12))을 저장하는 MySQL 데이터베이스가 있습니다. HeidiSQL을 사용하여 값을 선택할 때 값이 올바르게 표시됩니다 (예 : 15922.638440778302). 하지만 NodeJS에서 MySQL 바인딩 (https://github.com/mysqljs/mysql)을 사용하여 동일한 작업을 수행하면 15922.63844077830 이 표시됩니다.NodeJS : MySQL에서 부정확 한 10 진수 값을 반환합니다.

내 SQL-쿼리는 매우 간단하다 :

SELECT SUM(`amount`) FROM `balances`; 

어떤 생각 어떤 차이가 발생할 수 있습니다? 아마도 NodeJS에서 MySQL을 초기화하는 동안 정밀도를 지정해야합니까? 현재로서는 로그인 자격 증명 이외의 다른 것을 지정하지 않습니다.

let mysql = require('mysql').createPool({ 
    host: global.dbconfig['dbhost'], 
    database: global.dbconfig['dbname'], 
    user: global.dbconfig['dbuser'], 
    password: global.dbconfig['dbpass'] 
}) 
+0

은 diff는 17 자리에 대한에 있기 때문에, 나는 뭔가 DOUBLE''로 전환하기로 결정 추론, 정밀도는 약 16 자리입니다. –

답변

3

mysql 구성에 다음 행을 추가하십시오.

supportBigNumbers: true 
bigNumberStrings: true 

는 그 다음이된다 : 연결 옵션에

let mysql = require('mysql').createPool({ 
    host: global.dbconfig['dbhost'], 
    database: global.dbconfig['dbname'], 
    user: global.dbconfig['dbuser'], 
    password: global.dbconfig['dbpass'], 
    supportBigNumbers: true, 
    bigNumberStrings: true, 
}) 

상세 정보 : docs

+0

감사합니다. ** supportBigNumbers **로 충분하지 않다는 것을 알아 냈습니다. ** bigNumberStrings **도 활성화해야합니다. ** – Nrgyzer

+0

''MySQL을 이해해야 할뿐만 아니라 중급 패키지의 kludges도 알아야합니다. '' –

+0

감사합니다 ... thanks –

관련 문제