最近在開發一個教務管理系統,數據庫中有教師表(Teacher)、學生表(Student)等,其中屬性:出生日期(Birthday)為DATE類型。
在執行更新教師操作時,發現未改動教師的出生日期但更新后的日期卻減少了一天,最初以為是自己傳值地方寫錯了,但是經過追蹤發現傳值時日期一切正常,但是更新后日期卻又減少一天。
最后發現是因為最新的數據庫驅動中時區設置的原因。這種情況在DATE類型數據插入、更新時均會發生。
最新的MySql數據庫連接驅動為
jdbc.driver=com.mysql.cj.jdbc.Driver
其中URL配置為
jdbc.url=jdbc:mysql://localhost:3306/xxx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=UTC
一般默認serverTimezone配置為UTC,但是這樣的日期與系統日期有八個小時的時差
那么如何解決這樣的問題呢?
只需要將serverTimezone設置為Asia/Shanghai或者HongKong,問題就解決了。
jdbc.url=jdbc:mysql://localhost:3306/xxx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
舊版本的MySql數據庫驅動無需配置時區等
jdbc.driver=com.mysql.jdbc.Driver