Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

事象

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で指定できるようなので。(未検証)

KKZ@github
都内某所勤務の四十路SE。DBエンジニアという名の何でも屋。最近はブロックチェーン(Ethereum,Fabric)。初級シスアド/ORACLE MASTER 12c GOLD/テクニカルエンジニア(DB)/OSS-DB Silver。
http://d.hatena.ne.jp/kkz_tech/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした