回答編集履歴

1

タイムゾーンエラーを追記

2019/09/15 05:05

投稿

xebme
xebme

スコア1083

test CHANGED
@@ -133,3 +133,95 @@
133
133
  - Webアプリケーションでは、WEB-INF/lib配下にドライバーを配置すると、SPI機能が使えずドライバーがロードされません。仕方がないので、Class.forName()するのがあたりまえだと思われていますが、問題が起きる可能性があるので避けるべきです。
134
134
 
135
135
  - 質問のJavaアプリケーションでは、SPI機能が働くので、Class.forName()は書いてはいけません。
136
+
137
+
138
+
139
+ ###
140
+
141
+ **(タイムゾーンエラー)2019-09-15**
142
+
143
+
144
+
145
+ 私のLinux環境では発生しないので、Windowsにサーバーをインストールました。JDBCのエラーメッセージは、サーバーのタイムゾーンの名前が不明または複数存在する、です。解決方法も書かれています(以下のどちらか)。
146
+
147
+ - サーバーのタイムゾーンを設定する
148
+
149
+ - JDBCドライバーのserverTimezoneプロパティを設定する
150
+
151
+
152
+
153
+ **JavaプログラムでserverTimezoneを設定する解決法**
154
+
155
+
156
+
157
+ コメントしたとおり、urlの末尾に"?serverTimezone=JST"を追加してください。
158
+
159
+
160
+
161
+ ```Java
162
+
163
+ String url = "jdbc:mysql://" + servername + "/" + databasename + "?serverTimezone=JST";
164
+
165
+ ```
166
+
167
+
168
+
169
+ **サーバーのタイムゾーンを設定する解決法**
170
+
171
+
172
+
173
+ 管理者権限でmy.iniを変更。間違えるとサーバーが起動しなくなります。参考: [MariaDB (MySQL) のタイムゾーン、タイムゾーンテーブルを設定する](https://www.ipentec.com/document/mariadb-set-time-zone)
174
+
175
+
176
+
177
+ A. WindowsのMySQLサーバー用パッケージ: [MySQL Community Downloads](https://dev.mysql.com/downloads/timezones.html)
178
+
179
+ バージョン5.7+ のパッケージ(timezone_2019c_posix_sql.zip)をダウンロード。圧縮解除する。以下のコマンドでタイムゾーン情報を取り込む。
180
+
181
+ ```dos
182
+
183
+ > mysql -u root -p mysql < timezone_posix.sql
184
+
185
+ ```
186
+
187
+
188
+
189
+ B. 管理者権限でmy.iniを変更
190
+
191
+ 1) MySQLサービスを停止
192
+
193
+ 2) ProgramData\MySQL\MySQL Server 5.X\my.iniを[管理者権限で編集]バックアップ必須。[mysqld]グループの末尾に1行追加。
194
+
195
+ ```my.ini
196
+
197
+ default-time-zone='Asia/Tokyo'
198
+
199
+ ```
200
+
201
+ 3) MySQLサービスを起動
202
+
203
+
204
+
205
+ C. MySQLクライアントを起動、設定を確認。タイムゾーンが設定した名前になっていること。
206
+
207
+ ```
208
+
209
+ > mysql -u root -p
210
+
211
+ mysql> show variables like '%time_zone%';
212
+
213
+ +------------------+------------+
214
+
215
+ | Variable_name | Value |
216
+
217
+ +------------------+------------+
218
+
219
+ | system_time_zone | |
220
+
221
+ | time_zone | Asia/Tokyo |
222
+
223
+ +------------------+------------+
224
+
225
+ ```
226
+
227
+ サーバーで設定すれば、JavaプログラムのJDBC接続プロパティは不要です。