금액(통화 값)을 표현하려면 MySQL에서 DECIMAL(전체 자릿수, 소수점 이하 자릿수) 형식의 데이터 유형을 사용해야 합니다.
DECIMAL 데이터 유형이란?
예를 들어 345.66이라는 값을 저장해야 한다고 가정해 보겠습니다. 먼저 이 값이 몇 자리 숫자로 구성되어 있는지 살펴보겠습니다. 345.66은 총 5자리이며, 소수점 이하로는 2자리(66)가 있습니다.
MySQL에서는 DECIMAL() 메서드를 사용하여 동일하게 표현할 수 있으며, 정확한 표기는 다음과 같습니다.
DECIMAL(5,2)
여기서 첫 번째 숫자인 5는 정수부와 소수부를 포함한 전체 자릿수를 의미하고, 두 번째 숫자인 2는 소수점 이하 자릿수를 나타냅니다.
테이블 생성 및 데이터 삽입 예제
먼저 위에서 정의한 DECIMAL(5,2) 형식을 적용한 테이블을 생성해 보겠습니다.
mysql> create table MoneyRepresentation
-> (
-> Money Decimal(5,2)
-> );
Query OK, 0 rows affected (0.65 sec)
이제 앞서 언급한 값인 345.66을 삽입합니다.
mysql> insert into MoneyRepresentation values(345.66);
Query OK, 1 row affected (0.13 sec)
결과 확인
SELECT 문을 사용하여 모든 레코드를 조회해 보겠습니다.
mysql> select *from MoneyRepresentation;
실행 결과는 다음과 같습니다.
+--------+
| Money |
+--------+
| 345.66 |
+--------+
1 row in set (0.00 sec)
위 출력 결과를 보면 총 5자리 중 소수점 이하 2자리가 정확히 저장된 것을 확인할 수 있습니다. 이는 테이블 생성 시 Decimal(5,2)로 지정했기 때문입니다.
왜 FLOAT나 DOUBLE이 아닌 DECIMAL을 사용해야 할까?
통화 값을 저장할 때 DECIMAL을 권장하는 이유는 바로 '정확성' 때문입니다. FLOAT나 DOUBLE은 부동소수점 방식으로 근사값을 저장하기 때문에 금융 계산 과정에서 미세한 오차가 발생할 수 있습니다. 반면 DECIMAL은 정확한 십진수 값을 그대로 저장하므로, 돈처럼 절대적인 정확성이 요구되는 데이터를 다룰 때 가장 안전하고 신뢰할 수 있는 선택입니다.