MySQL DECIMAL을 소수점 이하 10자리 정밀도로 설정하는 방법
MySQL의 DECIMAL() 자료형은 두 개의 매개변수를 받습니다. 첫 번째 매개변수는 저장할 숫자의 전체 자릿수를 의미하고, 두 번째 매개변수는 소수점 이하 자릿수를 나타냅니다. 따라서 DECIMAL(10,10)으로 선언하면 소수점 이하 10자리만 사용할 수 있으며, 정수 부분은 저장할 수 없게 됩니다.
예를 들어 DECIMAL(20,10)을 사용하면 전체 20자리 중 소수점 이하 10자리까지 정확하게 저장할 수 있습니다. 즉, 0.9999999999처럼 소수점 아래 열 자리가 필요한 값도 오차 없이 보관할 수 있습니다.
테이블 생성하기
설명한 내용을 직접 확인해 보기 위해 테이블을 먼저 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table Decimal_Demo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Price DECIMAL(20,10),
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (1.06 sec)
데이터 삽입하기
이제 insert 명령어를 사용해 테이블에 여러 개의 레코드를 삽입해 보겠습니다.
mysql> insert into Decimal_Demo(Price) values(7475433123.1727374747);
Query OK, 1 row affected (0.15 sec)
mysql> insert into Decimal_Demo(Price) values(999.9999999999);
Query OK, 1 row affected (0.19 sec)
mysql> insert into Decimal_Demo(Price) values(1363645345.1726364664);
Query OK, 1 row affected (0.16 sec)
mysql> insert into Decimal_Demo(Price) values(1.172636466437475656565);
Query OK, 1 row affected, 1 warning (0.53 sec)
mysql> insert into Decimal_Demo(Price) values(0.9999999999);
Query OK, 1 row affected (0.20 sec)
네 번째 INSERT 구문에서 경고가 발생한 점에 주목하세요. 입력한 값 1.172636466437475656565는 소수점 이하 자릿수가 10자리를 초과하기 때문에, MySQL이 DECIMAL(20,10)의 정밀도에 맞춰 값을 조정했다는 의미입니다.
저장된 결과 확인하기
select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from Decimal_Demo;
실행 결과는 다음과 같습니다.
+----+-----------------------+
| Id | Price |
+----+-----------------------+
| 1 | 7475433123.1727374747 |
| 2 | 999.9999999999 |
| 3 | 1363645345.1726364664 |
| 4 | 1.1726364664 |
| 5 | 0.9999999999 |
+----+-----------------------+
5 rows in set (0.00 sec)
출력 결과를 보면 네 번째 레코드는 소수점 이하 자릿수가 초과되어 1.1726364664로 반올림되어 저장된 반면, 나머지 값들은 모두 소수점 이하 10자리까지 그대로 정확하게 저장된 것을 확인할 수 있습니다. 이처럼 금액이나 측정값처럼 정확한 소수 계산이 필요한 데이터를 다룰 때는 DECIMAL 자료형의 정밀도를 상황에 맞게 설계하는 것이 중요합니다.