MySQL에서 float 데이터 타입의 문제점
MySQL에서 FLOAT 타입은 부동소수점 방식으로 숫자를 저장하기 때문에 정밀도(precision) 문제가 발생할 수 있습니다. 즉, 모든 소수 값을 정확하게 저장하지 못하고 일부 값이 반올림되거나 거부되는 현상이 나타날 수 있습니다.
이 문제를 해결하려면 고정 소수점 방식으로 숫자를 저장하는 DECIMAL() 데이터 타입을 사용하는 것이 좋습니다. DECIMAL은 지정한 자릿수만큼 값을 정확하게 저장하므로 금액처럼 정확성이 중요한 데이터에 적합합니다.
DECIMAL을 사용한 테이블 생성
먼저 DECIMAL(10,2) 타입의 컬럼을 가진 테이블을 생성해 보겠습니다. 여기서 10은 전체 자릿수, 2는 소수점 이하 자릿수를 의미합니다.
mysql> create table DemoTable(Amount DECIMAL(10,2)); Query OK, 0 rows affected (0.54 sec)
데이터 삽입하기
이제 INSERT 명령어를 사용하여 테이블에 여러 개의 레코드를 삽입합니다.
mysql> insert into DemoTable values(2194848.90); Query OK, 1 row affected (0.65 sec) mysql> insert into DemoTable values(90309393.79); Query OK, 1 row affected (0.25 sec) mysql> insert into DemoTable values(8999999.68); Query OK, 1 row affected (0.30 sec) mysql> insert into DemoTable values(90900000.99); Query OK, 1 row affected (0.26 sec)
참고: DECIMAL(10,2)은 소수점을 포함해 최대 10자리까지 저장할 수 있으며, 그중 소수점 이하는 2자리입니다. 따라서 정수부는 최대 8자리까지 입력 가능합니다.
저장된 데이터 확인하기
SELECT 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+-------------+ | Amount | +-------------+ | 2194848.90 | | 90309393.79 | | 8999999.68 | | 90900000.99 | +-------------+ 4 rows in set (0.00 sec)
결론
FLOAT 타입은 저장 공간은 적게 들지만 정밀도 오차가 발생할 수 있어 모든 소수 값을 정확히 처리하지 못합니다. 반면 DECIMAL 타입은 고정 소수점 방식으로 값을 그대로 저장하기 때문에 정확한 숫자 계산이 필요한 경우 가장 안전한 선택입니다. 특히 금융, 회계 관련 데이터를 다룰 때는 DECIMAL 사용을 권장합니다.