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

MySQL에서 decimal(19,2) 컬럼에 데이터 삽입 시 값이 변경되는 문제 해결 방법

MySQL에서 decimal 값이 변경되는 이유와 해결 방법

MySQL에서 decimal(19,2) 타입의 컬럼에 소수점 셋째 자리 이하가 있는 값을 삽입하면, MySQL은 기본적으로 해당 값을 반올림하여 저장합니다. 만약 반올림 없이 정확한 실제 값을 그대로 저장하고 싶다면, 소수점 둘째 자리까지 잘라내는 TRUNCATE() 함수를 사용해야 합니다.

예를 들어, 15.346이라는 값을 그대로 삽입하면 15.35로 반올림되어 저장됩니다. 하지만 TRUNCATE() 함수를 활용하면 15.34로 잘린 값이 저장됩니다.

1. 테이블 생성

먼저 다음 쿼리로 테스트용 테이블을 생성합니다.

mysql> create table demo59
-> (
-> price decimal(19,2)
-> );
Query OK, 0 rows affected (1.12 sec)

2. TRUNCATE() 함수를 사용한 데이터 삽입

INSERT 명령어와 함께 TRUNCATE() 함수를 사용하여 여러 개의 레코드를 삽입합니다.

mysql> insert into demo59 values(truncate(15.346, 2));
Query OK, 1 row affected (0.14 sec)

mysql> insert into demo59 values(truncate(20.379, 2));
Query OK, 1 row affected (0.72 sec)

mysql> insert into demo59 values(truncate(25.555, 2));
Query OK, 1 row affected (0.16 sec)

mysql> insert into demo59 values(truncate(100.456, 2));
Query OK, 1 row affected (0.21 sec)

3. 결과 확인

SELECT 문을 사용하여 테이블에 저장된 레코드를 조회합니다.

mysql> select *from demo59;

위 쿼리는 다음과 같은 출력 결과를 생성합니다.

+--------+
| price  |
+--------+
| 15.34  |
| 20.37  |
| 25.55  |
| 100.45 |
+--------+
4 rows in set (0.00 sec)

정리

위 출력 결과에서 확인할 수 있듯이, 각 값은 반올림되지 않고 소수점 둘째 자리에서 잘려서 그대로 저장되었습니다. 즉, 15.346 → 15.34, 20.379 → 20.37, 25.555 → 25.55, 100.456 → 100.45로 저장된 것입니다.

만약 반올림된 값(15.35, 20.38 등)을 원한다면 TRUNCATE() 대신 ROUND() 함수를 사용하거나, 아무 처리 없이 값을 직접 삽입하면 됩니다. 상황에 따라 적절한 함수를 선택하여 사용하시기 바랍니다.