Data truncation: Incorrect datetime value: '1713673255884' for column 'expire_dtm'

김학준·2024년 6월 17일
0

게시판

목록 보기
1/44

문제 상황

시간을 대소비교 할 때는 숫자로 비교하는 것이 가장 편하기 때문에 기존 member_authexpire_dtm의 데이터 타입을 INT로 변경했더니 회원 가입을 할 떄 오류가 발생한다.

오류 메시지

Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: StatementCallback;
SQL [INSERT INTO forum.member_auth (member_seq, auth_num, auth_uri, reg_dtm, expire_dtm, auth_yn) VALUES(56, '', 'e67ff01ee499423285426bbb44d05df5', DATE_FORMAT(NOW(), '%Y%m%d%H%i%s'), 1713673255884, 'N');];
Data truncation: Incorrect datetime value: '1713673255884' for column 'expire_dtm' at row 1;
nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect datetime value: '1713673255884' for column 'expire_dtm' at row 1

오류 발생 부분

MemberAuthDao.java

public class MemberAuthDao extends JdbcTemplate {
	private DataSource dataSource;

	public int addMemberAuthInfo(MemberAuthDto dto) {
		/*
		 * String sql = String.format("INSERT INTO forum.member_auth " +
		 * "(member_seq, auth_num, auth_uri, reg_dtm, expire_dtm, auth_yn) " +
		 * "VALUES(%d, '', '%s', DATE_FORMAT(NOW(), '%%Y%%m%%d%%H%%i%%s'), %d, 'N'); ",
		 * dto.getMemberSeq(), dto.getAuthUri(), dto.getExpireDtm());
		 */
		String sql = "INSERT INTO forum.member_auth (member_seq, auth_num, auth_uri, reg_dtm, expire_dtm, auth_yn) "
				+ "VALUES(?, '', ?, DATE_FORMAT(NOW(), '%%Y%%m%%d%%H%%i%%s'), ?, 'N'); ";
		Object[] args = {dto.getMemberSeq(), dto.getAuthUri(), dto.getExpireDtm()};
		return update(sql, args);
	}

해결 방법

Data truncation이라는 단어에서 알 수 있듯이 1713673255884DATETIME 타입으로 변경하려다 값의 범위를 넘어 데이터 일부가 소실된다는 에러이다. member_authexpire_dtm의 데이터 타입을 더 큰 값의 범위를 담을 수 있는 BIGINT로 변경했다.

0개의 댓글