가격 컬럼에는 DECIMAL 타입이 가장 적합합니다
MySQL에서 가격과 같은 금액 데이터를 저장할 때 가장 적합한 데이터 타입은 DECIMAL입니다. DECIMAL은 부동소수점 방식(FLOAT, DOUBLE)과 달리 값을 정확하게 그대로 저장하기 때문에, 금전 계산에서 발생할 수 있는 오차를 원천적으로 방지할 수 있습니다.
DECIMAL(10,2)의 의미
예를 들어 DECIMAL(10,2)는 가격 값을 저장하는 데 널리 사용되는 형식입니다. 여기서 첫 번째 숫자인 10은 소수점을 포함한 전체 자릿수를, 두 번째 숫자인 2는 소수점 이하 자릿수를 의미합니다. 즉, 최대 8자리의 정수 부분과 2자리의 소수 부분을 저장할 수 있습니다.
DECIMAL 타입 이해를 위한 테이블 생성
DECIMAL 타입의 동작 방식을 확인하기 위해 간단한 테이블을 생성해 보겠습니다.
mysql> create table PriceDemo
-> (
-> ProductPrice DECIMAL(10,2)
-> );
Query OK, 0 rows affected (0.60 sec)
가격 데이터 삽입하기
이제 위에서 생성한 테이블에 다양한 형태의 가격 데이터를 삽입해 보겠습니다.
mysql> insert into PriceDemo values(12345.67);
Query OK, 1 row affected (0.12 sec)
mysql> insert into PriceDemo values(99999999.67);
Query OK, 1 row affected (0.17 sec)
mysql> insert into PriceDemo values(123456.67);
Query OK, 1 row affected (0.17 sec)
mysql> insert into PriceDemo values(4444444.50);
Query OK, 1 row affected (0.18 sec)
저장된 데이터 조회하기
삽입된 모든 레코드를 조회하여 값이 정확하게 저장되었는지 확인해 보겠습니다.
mysql> select *from PriceDemo;
실행 결과는 다음과 같습니다.
+--------------+
| ProductPrice |
+--------------+
| 12345.67 |
| 99999999.67 |
| 123456.67 |
| 4444444.50 |
+--------------+
4 rows in set (0.00 sec)
출력 결과에서 볼 수 있듯이, 입력한 가격 값들이 소수점 이하 두 자리까지 오차 없이 정확하게 저장된 것을 확인할 수 있습니다. 이처럼 가격, 잔액 등 정확성이 중요한 숫자 데이터에는 반드시 DECIMAL 타입을 사용하는 것이 좋습니다.