MySQL에서 소수점이 있는 숫자를 저장하려면 DECIMAL 데이터 타입의 두 가지 매개변수를 정확히 이해해야 합니다. 기본 문법은 다음과 같습니다.
DECIMAL(총_자릿수, 소수점_이하_자릿수);
DECIMAL 매개변수의 의미
예를 들어 DECIMAL(4,2)라고 선언하면 다음과 같은 규칙이 적용됩니다.
- 첫 번째 매개변수(4): 소수점을 포함한 전체 자릿수가 최대 4자리입니다. 즉, 소수점 앞에는 최대 2자리까지만 저장할 수 있습니다.
- 두 번째 매개변수(2): 소수점 아래는 최대 2자리까지만 저장됩니다.
유효한 값과 유효하지 않은 값
- 케이스 1 – 12.34 → 유효합니다.
- 케이스 2 – 123.4 → 유효하지 않습니다. (소수점 앞이 3자리라 범위 초과)
- 케이스 3 – 1.234 → 유효합니다. 소수점 셋째 자리 값은 반올림되어 1.23으로 저장됩니다.
테이블 생성으로 직접 확인하기
실제 테이블을 만들어 동작을 확인해 보겠습니다.
mysql> create table DecimalDemo
-> (
-> Amount DECIMAL(4,2)
-> );
Query OK, 0 rows affected (0.47 sec)
범위를 벗어난 값 (저장 실패)
DECIMAL(4,2)의 허용 범위를 넘는 값을 입력하면 에러가 발생합니다.
mysql> insert into DecimalDemo values(123.4);
ERROR 1264 (22003): Out of range value for column 'Amount' at row 1
mysql> insert into DecimalDemo values(1234);
ERROR 1264 (22003): Out of range value for column 'Amount' at row 1
mysql> insert into DecimalDemo values(1234.56);
ERROR 1264 (22003): Out of range value for column 'Amount' at row 1
정상적으로 저장되는 값
반면 아래 값들은 범위 내에 있으므로 정상적으로 입력됩니다. 소수점 이하 자릿수가 초과된 값은 자동으로 반올림 처리되며 경고(warning)가 표시됩니다.
mysql> insert into DecimalDemo values(12.34);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DecimalDemo values(12.4);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DecimalDemo values(.2345);
Query OK, 1 row affected, 1 warning (0.18 sec)
mysql> insert into DecimalDemo values(1.234);
Query OK, 1 row affected, 1 warning (0.16 sec)
저장된 데이터 조회하기
SELECT 문으로 테이블에 저장된 모든 값을 확인해 보겠습니다.
mysql> select *from DecimalDemo;
출력 결과
+--------+
| Amount |
+--------+
| 12.34 |
| 12.40 |
| 0.23 |
| 1.23 |
+--------+
4 rows in set (0.00 sec)
결과를 보면 12.4는 소수점 둘째 자리까지 표현하기 위해 12.40으로 저장되고, .2345와 1.234는 각각 0.23과 1.23으로 반올림되어 저장된 것을 확인할 수 있습니다. 이처럼 DECIMAL 타입은 금액, 요율 등 정확한 소수 계산이 필요한 데이터를 다룰 때 매우 유용합니다.