MySQL是一款流行的開源數據庫,但是它存在一個UTC時區慢8小時的問題。
UTC是協調世界時,也叫世界統一時間,是以格林威治天文臺的標準時間作為基礎。而MySQL默認使用的是系統時區,而系統時區受到操作系統和默認配置的限制,可能與UTC存在差異。
mysql>SELECT NOW(); +---------------------+ | NOW() | +---------------------+ | 2022-03-22 09:53:42 | +---------------------+ 1 row in set (0.00 sec)
上述示例中,MySQL返回的當前時間是2022年3月22日9點53分42秒,但實際上UTC時間應該是2022年3月22日1點53分42秒。這就是UTC時區慢8小時的問題。
解決UTC時區慢8小時的問題有多種方法,其中一種方法是設置MySQL的時區參數。可以使用以下命令查看當前的時區參數。
mysql>SELECT @@global.time_zone, @@session.time_zone; +--------------------+---------------------+ | @@global.time_zone | @@session.time_zone | +--------------------+---------------------+ | SYSTEM | SYSTEM | +--------------------+---------------------+ 1 row in set (0.00 sec)
上述示例中,MySQL的時區參數都是SYSTEM,表示使用系統時區。現在將MySQL的時區參數修改為UTC。
mysql>SET GLOBAL time_zone = '+0:00'; Query OK, 0 rows affected (0.00 sec) mysql>SELECT @@global.time_zone, @@session.time_zone; +--------------------+---------------------+ | @@global.time_zone | @@session.time_zone | +--------------------+---------------------+ | +0:00 | +0:00 | +--------------------+---------------------+ 1 row in set (0.00 sec)
修改后,MySQL的時區參數變為UTC,再次查詢當前時間。
mysql>SELECT NOW(); +---------------------+ | NOW() | +---------------------+ | 2022-03-22 01:53:42 | +---------------------+ 1 row in set (0.00 sec)
現在MySQL返回的當前時間與UTC時間一致,問題得到解決。