728x90
MysqlDataTruncation 에러 해결하기
🩸이슈 발생
MysqlDataTruncation : Data truncation : Truncated incorrect DOUBLE value : ' '
728x90
🩹이슈 해결
1. MysqlDataTruncation : Mysql 데이터 절단 오류
1) 삽입하려는 데이터가 열의 데이터 유형에 맞지 않을 때
2) 삽입하려는 데이터가 열의 용량(길이)을 초과할 때
2. Truncated incorrect DOUBLE value : ' '
: Mysql 데이터가 double 유형을 계산하고 있지만 ' ' (공백)이 반환됨
3. 쿼리문 확인
(1) 변경 전
<insert id="insertRefund" parameterType="hashmap">
INSERT INTO TBL_REFUND_INFO (
IN_AMOUNT,
DT_REFUND_DATE,
REG_MEMBER_SEQ,
MOD_MEMBER_SEQ,
IN_MANAGER_SEQ,
VC_MEMO,
CH_DEL_YN,
IN_PROC_CODE,
VC_REASON
) VALUES (
NULLIF(CAST(#{IN_AMOUNT} AS CHAR), ''),
NULLIF(#{DT_REFUND_DATE}, ''),
NULLIF(CAST(#{REG_MEMBER_SEQ} AS CHAR), ''),
NULLIF(#{MOD_MEMBER_SEQ}, ''),
NULLIF(#{IN_MANAGER_SEQ}, ''),
NULLIF(#{VC_MEMO}, ''),
'N',
NULLIF(#{IN_PROC_CODE}, ''),
NULLIF(#{VC_REASON}, '')
)
</insert>
(2) 변경 후
<insert id="insertRefund" parameterType="hashmap">
INSERT INTO TBL_REFUND_INFO (
IN_AMOUNT,
DT_REFUND_DATE,
REG_MEMBER_SEQ,
MOD_MEMBER_SEQ,
IN_MANAGER_SEQ,
VC_MEMO,
CH_DEL_YN,
IN_PROC_CODE,
VC_REASON
) VALUES (
NULLIF(CAST(#{IN_AMOUNT} AS CHAR), ''),
NULLIF(#{DT_REFUND_DATE}, ''),
NULLIF(CAST(#{REG_MEMBER_SEQ} AS CHAR), ''),
NULLIF(#{MOD_MEMBER_SEQ}, ''),
NULLIF(#{IN_MANAGER_SEQ}, '0'),
NULLIF(#{VC_MEMO}, ''),
'N',
NULLIF(#{IN_PROC_CODE}, ''),
NULLIF(#{VC_REASON}, '')
)
</insert>
💡 수정사항
NULLIF(#{IN_MANAGER_SEQ}, '0')
> 데이터타입에 맞지 않게 공백이 반환된다고 해서 ' ' (공백) 대신 '0' 을 넣어주었다.
🔎 의문점
① 원래는 INSERT 가 잘 됐는데 갑자기 에러난 이유는?
② 위에 사용된 열들의 데이터타입은 int 인데 double 이 뜨는 이유는? 데이터 타입 수정한 거 X
③ 다른 열들 (int) 에는 '0' 넣는다고 해서 해결이 안됐음. 반드시 IN_MANAGER_SEQ 에만 들어가야 했던 이유는?
300x250
'CODING > 🐬MySQL' 카테고리의 다른 글
[MySQL] 계정 생성 및 권한 부여하기 (0) | 2024.01.31 |
---|---|
[MySQL] 오라클 함수 총 정리 (1) | 2023.11.03 |
[MySQL] SQL 중복 값, 중복 개수 찾기 (GROUP BY, HAVING) (0) | 2023.10.13 |
[MySQL] DATE_FORMAT 함수 사용하기 (0) | 2023.08.17 |
[MySQL] WHERE 절에 서브 조건 하나 더 주기 (0) | 2023.08.14 |