在項目操作過程發現了一個時區的問題,問題現象為sql打印的時間和數據庫里面存儲的時間不一樣。后來發現問題原因為mysql的時區為CST。網上搜索了下CST時區,才發現這個時區已經被詬病已久。它居然能夠表示四種時區,分別為:
1.美國中部時間 Central Standard Time (USA) UTC-06:00
2.澳大利亞中部時間 Central Standard Time (Australia) UTC+09:30
3.中國標准時 China Standard Time UTC+08:00
4.古巴標准時 Cuba Standard Time UTC-04:00
由於CST存在歧義,所以導致java通過jdbc去獲取時區的時候,就會出現問題,通常會把CST解析為GTM+3時區。
這個時候,通常有兩個解決辦法:
1.修改mysql的設置,把mysql的時區設置為UTC或+8:00
修改mysql的時區也有兩種方式
1)通過客戶端連接mysql,通過命令設置時區
可以先查看當前時區:show variables like '%time_zone%';
確認時區為CST后再進行修改:set time_zone='+8:00';
2)修改my.cnf文件,再mysqld設置項下添加default-zone-time='+8:00'
2.修改jdbc連接設置,直接把連接的時區固定死,繞開mysql本身的時區。
就是在jdbc連接配置上添加以下兩個配置即可:
useTimezone=true&serverTimezone=GMT%2B8
分別為啟用時區設置和設置連接服務的時區。
此時,jdbc操作都會使用自定義時區去進行時間處理。