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

MySQL에서 FLOAT 값을 DECIMAL 컬럼에 삽입할 때 경고 메시지 확인하는 방법

DECIMAL 데이터 타입으로 임시 테이블을 생성하면, 소수점 이하 값이 잘리는 FLOAT 형태의 데이터가 삽입될 때 경고 메시지를 확인할 수 있습니다. 이때 발생한 경고는 SHOW WARNINGS 명령어를 통해 동일하게 조회할 수 있습니다.

임시 테이블 생성하기

먼저 테스트용 임시 테이블을 생성해 보겠습니다. 다음 쿼리를 사용합니다.

mysql> create temporary table WarningDemo
-> (
-> Value DECIMAL
-> );
Query OK, 0 rows affected (0.13 sec)

참고로 DECIMAL 타입은 정밀도(precision)와 스케일(scale)을 지정하지 않으면 기본적으로 DECIMAL(10,0)으로 설정됩니다. 즉, 소수점 이하 자릿수를 저장할 수 없기 때문에 소수 값이 삽입되면 반올림 처리되고 경고가 발생합니다.

데이터 삽입 및 경고 발생 확인

INSERT 명령어를 사용하여 테이블에 레코드를 삽입합니다.

mysql> insert into WarningDemo values(9.80);
Query OK, 1 row affected, 1 warning (0.03 sec)

실행 결과에서 "1 warning"이라는 메시지가 출력된 것을 확인할 수 있습니다. 이제 SHOW WARNINGS 명령어로 경고의 상세 내용을 조회해 보겠습니다.

SHOW WARNINGS;

출력 결과

+-------+------+--------------------------------------------+
| Level | Code | Message |
+-------+------+--------------------------------------------+
| Note | 1265 | Data truncated for column 'Value' at row 1 |
+-------+------+--------------------------------------------+
1 row in set (0.00 sec)

경고 메시지를 보면 코드 1265번의 Note 레벨 경고가 표시되며, "첫 번째 행의 'Value' 컬럼에서 데이터가 잘렸다(Data truncated)"는 의미입니다.

저장된 데이터 확인하기

SELECT 문을 사용하여 테이블의 모든 레코드를 조회합니다.

mysql> select *from WarningDemo;

출력 결과

+-------+
| Value |
+-------+
| 10 |
+-------+
1 row in set (0.00 sec)

삽입한 값 9.80이 반올림되어 10으로 저장된 것을 확인할 수 있습니다. 이처럼 소수점 이하 자릿수가 없는 DECIMAL 컬럼에 소수 값을 삽입하면 값이 반올림되면서 경고가 발생하며, SHOW WARNINGS 명령어로 그 내용을 손쉽게 확인할 수 있습니다.