質問するログイン新規登録

回答編集履歴

1

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

2019/09/15 05:05

投稿

xebme
xebme

スコア1109

answer CHANGED
@@ -65,4 +65,50 @@
65
65
 
66
66
  **注意事項**
67
67
  - Webアプリケーションでは、WEB-INF/lib配下にドライバーを配置すると、SPI機能が使えずドライバーがロードされません。仕方がないので、Class.forName()するのがあたりまえだと思われていますが、問題が起きる可能性があるので避けるべきです。
68
- - 質問のJavaアプリケーションでは、SPI機能が働くので、Class.forName()は書いてはいけません。
68
+ - 質問のJavaアプリケーションでは、SPI機能が働くので、Class.forName()は書いてはいけません。
69
+
70
+ ###
71
+ **(タイムゾーンエラー)2019-09-15**
72
+
73
+ 私のLinux環境では発生しないので、Windowsにサーバーをインストールました。JDBCのエラーメッセージは、サーバーのタイムゾーンの名前が不明または複数存在する、です。解決方法も書かれています(以下のどちらか)。
74
+ - サーバーのタイムゾーンを設定する
75
+ - JDBCドライバーのserverTimezoneプロパティを設定する
76
+
77
+ **JavaプログラムでserverTimezoneを設定する解決法**
78
+
79
+ コメントしたとおり、urlの末尾に"?serverTimezone=JST"を追加してください。
80
+
81
+ ```Java
82
+ String url = "jdbc:mysql://" + servername + "/" + databasename + "?serverTimezone=JST";
83
+ ```
84
+
85
+ **サーバーのタイムゾーンを設定する解決法**
86
+
87
+ 管理者権限でmy.iniを変更。間違えるとサーバーが起動しなくなります。参考: [MariaDB (MySQL) のタイムゾーン、タイムゾーンテーブルを設定する](https://www.ipentec.com/document/mariadb-set-time-zone)
88
+
89
+ A. WindowsのMySQLサーバー用パッケージ: [MySQL Community Downloads](https://dev.mysql.com/downloads/timezones.html)
90
+ バージョン5.7+ のパッケージ(timezone_2019c_posix_sql.zip)をダウンロード。圧縮解除する。以下のコマンドでタイムゾーン情報を取り込む。
91
+ ```dos
92
+ > mysql -u root -p mysql < timezone_posix.sql
93
+ ```
94
+
95
+ B. 管理者権限でmy.iniを変更
96
+ 1) MySQLサービスを停止
97
+ 2) ProgramData\MySQL\MySQL Server 5.X\my.iniを[管理者権限で編集]バックアップ必須。[mysqld]グループの末尾に1行追加。
98
+ ```my.ini
99
+ default-time-zone='Asia/Tokyo'
100
+ ```
101
+ 3) MySQLサービスを起動
102
+
103
+ C. MySQLクライアントを起動、設定を確認。タイムゾーンが設定した名前になっていること。
104
+ ```
105
+ > mysql -u root -p
106
+ mysql> show variables like '%time_zone%';
107
+ +------------------+------------+
108
+ | Variable_name | Value |
109
+ +------------------+------------+
110
+ | system_time_zone | |
111
+ | time_zone | Asia/Tokyo |
112
+ +------------------+------------+
113
+ ```
114
+ サーバーで設定すれば、JavaプログラムのJDBC接続プロパティは不要です。