MySQL存儲時區是數據庫中一個非常重要的概念。它允許我們存儲日期和時間時,不僅考慮到使用不同的時間戳,而且還考慮到使用不同的時區。這是非常有用的,尤其是在多國家和多時區的系統中。
在MySQL中,我們可以使用如下代碼來查看當前時區:
SELECT @@global.time_zone;
也可以使用如下代碼來修改時區:
SET GLOBAL time_zone = '+8:00';
如果我們在創建一個表時需要考慮時區,我們可以使用以下代碼:
CREATE TABLE my_table ( my_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci DEFAULT TIME_ZONE = 'Asia/Shanghai';
這里有幾個需要注意的問題。首先是我們在創建表時使用了“DEFAULT TIME_ZONE”語句來設置時區。在這里,我們設置了上海的時區。
其次,如果您正在使用Windows系統,則需要從面板中下載和使用“zoneinfo”時區數據庫。您需要在配置文件my.ini中設置正確的路徑:
[mysqld] ... # Set timezone to China Standard Time # Priority set is %SYSTEM%/etc/mytzinfo.cnf >%SYSTEM%/my.ini >mysql_install_path/my.cnf # Please record you have to use absoulte path defined in mytzinfo.cnf # System default my.cnf is located at C:\ProgramData\MySQL\MySQL Server 8.0\my.ini # But in some situations, it's located at C:\Program Files\MySQL\MySQL Server 8.0\my.ini # So you better check your system carefully before you making any changes for this file default-time-zone = '+08:00' # Set zoneinfo path # I use XAMPP, and xampp-mysql-addon-... # into the path: C:\xampp\mysql\share # Incidentally, the file name should be lower case loose-localtime-zone = 'Asia/Shanghai' mysql-8.0.11>version() # This function tested in xampp-mysql-addon-8.0.11-2-vc15 # mysql-8.0.11-date2018-05-22-xampp-mysql-addon-...
最后,一些常見問題需要注意。如果您在讀取MySQL_timestamp類型時使用了PHP strtotime()函數,則會將其轉換為UNIX適用的時間戳。這個時間戳并不考慮時區,所以需要注意。您還需要考慮夏令時的問題,并且在涉及這個問題時使用date()和strtotime()函數。