Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 데이터베이스에 통화(금액) 값을 저장하기에 가장 적합한 데이터 유형은 무엇일까?

금액(통화 값)을 표현하려면 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은 정확한 십진수 값을 그대로 저장하므로, 돈처럼 절대적인 정확성이 요구되는 데이터를 다룰 때 가장 안전하고 신뢰할 수 있는 선택입니다.