본문 바로가기

MYSQL

[mysql] [JDBC] [에러] JDBC 이용하여 mysql 접속 시, "java.sql.SQLException: The server time zone value 'KST' is unrecognized or represents more than one time zone ..." 문제 - timezone 관련 문제

Exception in thread "main" java.lang.RuntimeException: 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 specifc time zone value if you want to utilize time zone support.

 

JDBC를 이용하여 mysql 접속 시 , timezone 관련 문제가 발생하였다.

 

현재 내 컴퓨터가 사용 중인 KST라는 타임존을 찾을 수 없다는 것이다.

MYSQL은 KST라는 타임존을 지원하지 않기 때문이다.

 

따라서, MYSQL의 타임존을 Asia/Seoul로 바꾸어주면 된다.

 

방법 1. MYSQL time_zone을 Asia/Seoul로 바꾸기

 

1. 먼저, 현재 mysql timezone을 확인해보았다.

SELECT @@global.time_zone, @@session.time_zone;

아래와 같이 system으로 설정되어있다면, 기본값으로 설정 되어 있는 것이다.

따라서, timezone을 설정해주어야 한다.

 

2. timezone 설정하기

mysql의 my.cnf 파일을 바꿔주는 방식으로 진행해보자.

 

아래의 명령어를 쳐보자.

mysql --help

아래와 같이 나오는데, 왼쪽부터 설정 파일을 적용하는 순서이다.

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /opt/homebrew/etc/my.cnf ~/.my.cnf

 

최상위 설정 파일인 /etc/my.cnf 에 들어가보자.

sudo vi /etc/my.cnf

 

아래의 내용을 작성하자

[mysqld]
default-time-zone=Asia/Seoul

 

mysql 서버를 재시작하자

mysql.server restart

 

재시작했는데, 다음과 같은 에러가 발생했다....

ERROR! The server quit without updating PID file (/opt/homebrew/var/mysql/yoonui-MacBookAir.local.pid)

해당 에러를 해결하려고 했지만, 해결되지 않아 mysql timezone을 바꾸는 방식이 아닌 다른 방법을 사용해보겠다.

 

방법 2. JDBC URL에 시간대를 적어서, mysql 서버의 시간대 재정의하기

java에서 jdbcURl을 줄 때, 뒤에 ?characterEncoding=UTF-8&serverTimezone=UTC 를 붙여서 url을 주면 된다.

jdbc:mysql://ip:port/TestDB?characterEncoding=UTF-8&serverTimezone=UTC

 

 

아래처럼 하면 된다는 뜻이다.