MySQL에서 특정 숫자 데이터에 대한 계산을 통해 결과값을 도출하는 경우에 해당 결과값이 엉뚱한 값이 나오는 경우가 있다.
필자의 동료도 숫자 데이터를 단순히 나눠서 더하는 작업을 진행했는데 전혀 엉뚱한 값이 도출되어 해당 문제를 문의 하였다.
이런 경우는 MySQL의 특별한 결과값 Return 데이터 타입에 의해 발생하는 것으로 보인다.
레퍼런스를 뒤져 보면 다음과 같은 구문이 있는 것을 확인할 수 있다
For numeric arguments, the variance and standard deviation functions return a DOUBLE
value. The SUM()
and AVG()
functions return a DECIMAL
value for exact-value arguments (integer or DECIMAL
), and a DOUBLE
value for approximate-value arguments (FLOAT
or DOUBLE
).
이 구문은 다음의 레퍼런스에 나와있는 글이다.
https://dev.mysql.com/doc/refman/8.0/en/group-by-functions.html
읽어보면 숫자 인자의 경우 수식 관련 작업을 하는 경우 해당 값이 Double로 전달되어지고, SUM이나 AVG 경우에는 인자의 타입에 따라 DECIMAL 또는 DOUBLE의 형태로 전달 된다는 내용임을 알 수 있다.
만약, 단위가 많이 차이나는 값이나, ( 양수와 음수의 더하기) 또는 소수점이 있는 경우에는 Double이나 Float 타입의 경우 fault가 발생하여 요상한 값이 발생할 수 있다. 그런 위험성이 있다고 판단되는 경우에는 형변환을 통해 Decimal이나 INT형으로 변환하여 처리하면 된다.
'MySQL 에러 처리법' 카테고리의 다른 글
xtrabackup 복구후 log sequence ....in the future 에러 발생 (0) | 2019.06.06 |
---|---|
Communications link failure 에러 처리 방식 모음 (0) | 2019.04.24 |
zeroDateTimeBehavior=CONVERT_TO_NULL should not apply to 00:00:00 TIME columns (0) | 2019.02.22 |
MySQL Ver. 5.6과 MySQL Ver. 5.7 바이너리 로그 호환성 문제로 인한 에러 (0) | 2019.02.15 |
MySQL Replication 시 시간 데이터 깨짐 문제 (0) | 2019.01.29 |