[MySQL] The server time zone value is unrecognized or represents more than one time zone μλ¬ ν΄κ²° λ°©λ²
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