MySQL SQLException: Zero date value prohibited 이슈

2023. 1. 20. 01:11γ†πŸ“” TIL

⚑️ 상황

>>> ERROR o.h.e.jdbc.spi.SqlExceptionHelper - Zero date value prohibited 

μžλ°” μ†ŒμŠ€μ—μ„œ mysql 의 값을 κ°€μ Έμ˜¬ λ•Œ λ°œμƒν•œ μ˜ˆμ™Έ.

Zero date λΌλŠ” λ‘œκ·Έμ—μ„œ μΆ”μΈ‘μ»¨λŒ€ ν•΄λ‹Ή ν…Œμ΄λΈ”μ˜ λ‚ μ§œ μ»¬λŸΌμ— λ¬Έμ œκ°€ μžˆλ‹€κ³  μƒκ°ν–ˆλ‹€.

 

 

πŸ“Œ 원인

μ•„λž˜ ν…Œμ΄λΈ”μ—μ„œ 보듯 updated_at 컬럼의 값이 λͺ¨λ‘ zero date(0000-00-00 00:00:00)둜 μ €μž₯λ˜μ–΄ μžˆλ‹€.

μ•„λ§ˆ null 값을 μ±„μš°κΈ° μœ„ν•΄ 곡백 데이터λ₯Ό λ„£μ–΄λ‘” 것 κ°™λ‹€.

 

 

Mysql 은 0000-00-00 00:00:00 ν˜•μ‹ (= zero_date) 으둜 λ‚ μ§œλ₯Ό μ €μž₯ν•  수 μžˆμ§€λ§Œ, (이게 정상적인 date λŠ” μ•„λ‹˜)

λ¬Έμ œλŠ” μžλ°” μ†ŒμŠ€(java.sql.Date)κ°€ ν‘œν˜„ν•  수 μžˆλŠ” 값이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— μ˜ˆμ™Έκ°€ λ°œμƒν•œλ‹€.

 

βœ… ν•΄κ²°

2가지 λ°©λ²•μœΌλ‘œ ν•΄κ²°ν•  수 μžˆλŠ”λ°

1) 첫 번째 방법은 zero_date λ₯Ό μ—†μ• λ²„λ¦¬λŠ” 것,

2) 두 번째 방법은 zero_date λ₯Ό null μ²˜λ¦¬ν•˜λŠ” 것이닀.

 

1) λ‚΄ μƒν™©μ—μ„œλŠ” updated_at의 값을 created_at 의 κ°’μœΌλ‘œ μ—Žμ–΄μ³λ„ λ¬΄κ΄€ν–ˆκΈ°μ—, zero_date λ₯Ό λͺ¨λ‘ created_at κ°’ 으둜 λ³€κ²½μ‹œμΌ°λ‹€.

2) ν•˜μ§€λ§Œ λ¬΄μž‘μ • created_at 으둜 μ—Žμ–΄μΉ  수 μ—†λŠ” 상황이라면, jdbc-url 뒀에 zeroDateTimeBehavior=convertToNull μ˜΅μ…˜μœΌλ‘œ ν•΄κ²°ν•  수 μžˆλ‹€.

>>> jdbc:mysql://{host}/{db}?zeroDateTimeBehavior=convertToNull