MySQL Connector/J  8.0을 사용하면 아래와 같은 에러가 나고 JDBC connection 이 실패하는 경우가 있습니다.

java.sql.SQLException: The server time zone value 'KST' is unrecognized or represents more than one time zone. 
You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specific time zone value
if you want to utilize time zone support.
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
CODE

Connector 5.1 에서는 시스템 기본 timezone 을 사용하므로 발생하지 않고 8부터 발생하는데 명시적으로 어떤 time zone 을 사용하는지 지정해 주어서 해결할 수 있습니다.


time zone 설정 방법은 아래 2가지중 하나를 설정하면 됩니다.

JDBC URL 변경

JDBC URL 에 serverTimezone 프로퍼티를 추가해 주고 app 를 재구동해주면 됩니다. 예로 다음은 timezone 을 'Asia/Seoul' 로 설정하는 예입니다.

jdbc:mysql://localhost/db?useUnicode=true&serverTimezone=Asia/Seoul
CODE

UTC 를 사용하는 경우 명시적으로 UTC 라고 지정하면 됩니다.

jdbc:mysql://localhost/db?useUnicode=true&serverTimezone=UTC
CODE


mysql 서버에 timezone 설정

mysql 설정 파일(예: /etc/my.cnf) 에 time zone 을 설정하고 재구동하면 됩니다. time zone 은 UTC 를 기준으로 빠르면 +, 느리면 - 기호 뒤에 시간 차이를 적어줍니다.

한국의 time zone 인 Asia/Seoul 은 UTC 보다 9시간 빠르므로 아래와 같이 적어주면 됩니다.

[mysqld]
default_time_zone = '+09:00'
CODE


설정이 끝났으면 mysql daemon 을 재구동합니다.

$ sudo systemctl restart mysql
BASH


같이 보기