LoginSignup
17
16

More than 5 years have passed since last update.

Grails 3 + MySQLでrun-app時に「The server time zone value」でエラーが出る場合の対処

Posted at

事象

Grailsのapplication.ymlにMySQLへの接続設定を記載した上で grails run-app すると、以下のようなエラーが出て起動に失敗する。

PS C:\Users\KKZ\Git\SampleApp> grails run-app
| Running application...

2017-04-13 10:37:39.630 ERROR --- [ost-startStop-1] o.a.tomcat.jdbc.pool.ConnectionPool      : Unable to create initial connections of pool.

java.sql.SQLException: The server time zone value '?ソス?ソス?ソス?ソス (?ソスW?ソス?ソス?ソス?ソス)' is unrecognized or represents more than one time zone. You must co
nfigure 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.
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:545)

使用環境

  • Windows7 64bit
  • posh-gvm
  • Grails 3.2.7
  • Groovy 2.4.9
  • MySQL 5.7.17
  • mysql-connector-java 6.0.6

原因

Windows環境だと文字化けしてて読めないのですが、おそらくマシンの環境からタイムゾーンを取得して、Asia/東京(UTC+9:00)のような文字列をサーバー標準時としてMySQLに渡そうとしているのですが、MySQL側でこのタイムゾーン設定を受け付けていないのでエラーになっている、という事象かと思われます。

対処

一番楽なのは、MySQL側のデフォルトタイムゾーンに明確な指定を入れてしまうことです。
my.inidefault-time-zone の設定を加えて、プロセス再起動。

[mysqld]
default-time-zone = +9:00

試してませんが、たぶんmysqlのコンソールからのSET GLOBALでも直せそう。

SET GLOBAL default-time-zone = `+3:00`;

さらに別解としては、JDBCの接続文字列を

jdbc:mysql://localhost:3306/myschema

じゃなくて

jdbc:mysql://localhost:3306/myschema?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

みたいな感じでJDBC接続文字列のオプションとして渡すやり方でも直せそうな気はします。serverTimezoneで指定できるようなので。(未検証)

17
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
16