자바에서 String 타입의 날짜형식("yyyy-MM-dd")으로 MySql의 Date타입의 컬럼에게 넘겨줬을 때 MySql은 어떻게 이해할까?
공식문서를 찾아보자...!
MySQL은 표준 출력 형식으로 지정된 날짜 또는 시간 유형에 대한 값을 검색하지만, 사용자가 제공하는 입력 값에 대해 다양한 형식을 해석하려고 시도합니다.
(예: 날짜 또는 시간 유형에 할당하거나 비교할 값을 지정하는 경우). 날짜 및 시간 유형에 허용되는 형식에 대한 설명은 섹션 9.1.3, "날짜 및 시간 리터럴"을 참조하세요.
유효한 값을 제공해야 합니다. 다른 형식의 값을 사용하면 예상치 못한 결과가 발생할 수 있습니다.
MySql 공식문서
해석하려고 시도
한다가 즉, 어떠한 날짜 형식도 사용자의 의도의 맞추어 동작한다는 뜻은 아니다.
예를 들어 MySQL에서 날짜를 요구하는 컨텍스트에서는 '2015-07-21', '20150721', 20150721 중 하나를 날짜로 해석한다고 한다.
MySQL은 여러 형식으로 값을 해석하려고 하지만 날짜 부분은 다른 곳에서 일반적으로 사용되는 월-년 또는 일-월-일 순서(예: '09-04-98', '04-09-98')가 아니라
항상 연-월-일 순서(예: '98-09-04')로 제공해야 합니다. 다른 순서의 문자열을 연도-월-일 순서로 변환하려면 STR_TO_DATE() 함수가 유용할 수 있습니다.
기본적으로 MySQL은 범위를 벗어나거나 해당 유형에 대해 유효하지 않은 날짜 또는 시간 유형에 대한 값을 발견하면 해당 값을 해당 유형의 "0" 값으로 변환합니다.
예외적으로 범위를 벗어난 TIME 값은 TIME 범위의 적절한 끝점으로 클리핑됩니다.
MySql 공식문서
다음 표는 각 유형에 대한 " 0 " 값의 형식을 보여줍니다. " 0 " 값 은 특별하지만 테이블에 표시된 값을 사용하여 명시적으로 저장하거나 참조할 수 있습니다.
Data Type | Value(Zero) |
---|---|
DATE | '0000-00-00' |
TIME | '00:00:00' |
DATETIME | '0000-00-00 00:00:00' |
TIMESTAMP | '0000-00-00 00:00:00' |
YEAR | 0000 |
항상 DB관련 작업을 할때마다 헷갈렸던? 개념인데 이번기회에 다잡고 가자...!
큰 도움이 되었습니다, 감사합니다.