ฉันคิดว่านี่อาจเป็นประโยชน์:
มีสามสถานที่ที่อาจตั้งค่าเขตเวลาใน MySQL:
ในไฟล์ "my.cnf" ในส่วน [mysqld]
default-time-zone='+00:00'
ตัวแปร @@ global.time_zone
หากต้องการดูว่ามีการตั้งค่าไว้ที่:
SELECT @@global.time_zone;
หากต้องการตั้งค่าให้ใช้อย่างใดอย่างหนึ่ง:
SET GLOBAL time_zone = '+8:00';
SET GLOBAL time_zone = 'Europe/Helsinki';
SET @@global.time_zone = '+00:00';
(การใช้เขตเวลาที่มีชื่อเช่น 'ยุโรป / เฮลซิงกิ' หมายความว่าคุณต้องมีตารางเขตเวลาที่มีประชากรอยู่อย่างถูกต้อง)
โปรดจำไว้ว่า+02:00
เป็นการชดเชย Europe/Berlin
เป็นเขตเวลา (ที่มีสองออฟเซ็ต) และCEST
เป็นเวลานาฬิกาที่สอดคล้องกับออฟเซ็ตเฉพาะ
ตัวแปร @@ session.time_zone
SELECT @@session.time_zone;
ในการตั้งค่าให้ใช้อย่างใดอย่างหนึ่ง:
SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
SET @@session.time_zone = "+00:00";
ทั้งคู่อาจคืนค่าระบบซึ่งหมายความว่าพวกเขาใช้ชุดเขตเวลาใน my.cnf
สำหรับชื่อเขตเวลาในการทำงานของคุณต้องติดตั้งตารางข้อมูลเขตเวลาของคุณจะต้องมีประชากร: http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html ฉันยังพูดถึงวิธีการเติมตารางเหล่านั้นในคำตอบนี้
เพื่อรับค่าเขตเวลาปัจจุบันเป็น TIME
SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);
มันจะกลับมา 02:00:00 ถ้าเขตเวลาของคุณคือ +2: 00
ในการรับเวลาประทับปัจจุบันของ UNIX:
SELECT UNIX_TIMESTAMP();
SELECT UNIX_TIMESTAMP(NOW());
เพื่อรับคอลัมน์เวลาประทับเป็น UNIX Timestamp
SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name`
ในการรับคอลัมน์ UTC datetime เป็นเวลาประทับ UNIX
SELECT UNIX_TIMESTAMP(CONVERT_TZ(`utc_datetime`, '+00:00', @@session.time_zone)) FROM `table_name`
หมายเหตุ: การเปลี่ยนเขตเวลาจะไม่เปลี่ยนวันที่และเวลาที่เก็บไว้แต่จะแสดงช่วงเวลาที่แตกต่างกันสำหรับคอลัมน์เวลาปัจจุบันที่มีอยู่เนื่องจากจะถูกเก็บไว้ภายในเป็นเวลาประทับ UTC และแสดงภายนอกในเขตเวลา MySQL ปัจจุบัน
ฉันทำ cheatsheet ที่นี่: MySQL ควรตั้งค่าเขตเวลาเป็น UTC หรือไม่
ntp
- และดูว่าอะไรเหมาะกับคุณ!"