The server time zone value is unrecognized or represents more than one time zone ์๋ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ
Java์์ ๋ก์ปฌ MySQL ์๋ฒ์ ์ฐ๊ฒฐํ๋ ์ค ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
java.sql.SQLException: The server time zone value 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 ๋๋ผ์ด๋ฒ(serverTimezone configuration property๋ฅผ ํตํด)๋ฅผ ๊ตฌ์ฑํ์ฌ ๋ ๊ตฌ์ฒด์ ์ธ ํ์ค ์๊ฐ๋ ๊ฐ์ ์ฌ์ฉํด์ผํ๋ค.' ๋ผ๋ ๋ป์ด๋ค.
ํ์ฌ MySQL์ GLOBAL(์ ์ญ) ๋ฐ SESSION time zone(์๊ฐ๋) ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ํ์ธํ ์ ์๋ค.
SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
'SYSTEM'์ MySQL ์๋ฒ ์๊ฐ๋๊ฐ ์์คํ
์๊ฐ๋์ ๋์ผํ ๊ฒ์ผ๋ก์จ ๊ตฌ์ฒด์ ์ธ ๋ช
์๊ฐ ๋์ด์์ง ์์์ ๋ํ๋ธ๋ค. ์ด ๋๋ฌธ์ Exception์ด ๋ฐ์ํ ๊ฒ์ด๋ค. ์๋์ ๋ฐฉ๋ฒ ์ค ํ๋๋ฅผ ํํ์ฌ ์๊ฐ๋๋ฅผ ์ง์ ํ๋ฉด ํด๊ฒฐ๋๋ค.
๋ฐฉ๋ฒ 1: SET Statement ์คํ
์ด ๋ฐฉ๋ฒ์ ๋ฐํ์์ ์๋ฒ ์๊ฐ๋ ๊ฐ์ ์ค์ ํ ์ ์๋ค. ์๊ฐ๋๋ UTC๋ก๋ถํฐ์ ์คํ์ ์ ๋ํ๋ด๋ ๋ฌธ์์ด๋ก ์ง์ ํ ์ ์๋ค. UTC๋ก ์ง์ ํ๋ ค๋ฉด '+0:00'์ผ๋ก, KST๋ก ์ง์ ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด '+9:00'์ผ๋ก ์ง์ ํด์ฃผ๋ฉด ๋๋ค.
SET GLOBAL time_zone = '+9:00'; # ๊ถํ ํ์
SET time_zone = '+9:00';
SET GLOBAL time_zone์ ์คํํ๋ ค๋ฉด ๊ถํ์ด ํ์ํ๋ค.
๋ฐฉ๋ฒ 2: default-time-zone ์ต์ ์ง์
์ด ๋ฐฉ๋ฒ์ ์๋ฒ ์ฌ๊ธฐ๋์ด ํ์ํ๋ค. ์๋ฒ ๊ตฌ๋ ์ ๋ช ๋ น์ค์ --default-time-zone ์ต์ ์ ์ฌ์ฉํ๊ฑฐ๋ my.ini ํ์ผ์ [mysqld]์ ์ถ๊ฐํ๋ค.
my.ini ์์ ํ MySQL ์๋ฒ๋ฅผ ์ฌ๊ธฐ๋ํ๋ค.
๋ฐฉ๋ฒ1 ๋๋ ๋ฐฉ๋ฒ2๋ฅผ ์ ์ฉํ๋ฉด ์๋์ ๊ฐ์ด MySQL ์๋ฒ ์๊ฐ๋๊ฐ ๋ณ๊ฒฝ๋๋ฉฐ ์๋ฐ์์ ์ ์์ ์ผ๋ก ์ฐ๊ฒฐํ ์ ์๋ค.
๋ฐฉ๋ฒ 3: JDBC Properties ์ค์
์ด ๋ฐฉ๋ฒ์ MySQL ์๋ฒ์ ์๊ด ์์ด JDBC์ ์ฐ๊ฒฐ ์ ์์ฑ๊ฐ์ ์ค์ ํด์ ์๊ฐ๋๋ฅผ override(์ฌ์ ์)ํ๋ ๋ฐฉ๋ฒ์ด๋ค. MySQL ์๋ฒ ์๊ฐ๋๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ค.
์ฐ๊ฒฐ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ serverTimezone property๋ฅผ ๋๊ธฐ๊ฑฐ๋ JDBC URL์ ์ถ๊ฐํ๋ค.
๋จ MySQL ์๋ฒ์ ์๊ฐ๋๋ฅผ ์ง์ ํ๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ ํ๊ตญ ์๊ฐ์ Asia/Seoul ๊ฐ์ ์ง์ ํด์ผ ํ๋ค.
properties.setProperty("serverTimezone", "Asia/Seoul");
try {
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/knou", properties);
<Properties ๊ฐ์ฒด์ ๋ด์ ๋๊ฒจ์ ์ค์ >
try {
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/knou?serverTimezone=Asia/Seoul", properties);
<JDBC URL์ ๋ถ์ฌ์ ์ค์ >
์ฐธ๊ณ ๋ก serverTimezone์ ์๋ฒ์ ํ์ค ์๊ฐ๋๊ฐ Java ํ์ค ์๊ฐ๋๋ก ๋งคํ๋์ง ์์ ๋ ์ฌ์ฉ๋๋ ์์ฑ์ด๋ค.
References
https://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html
๋๊ธ