Secara default, (setidaknya pada instalasi berbasis Debian) tidak ada data zona waktu yang dimuat ke MySQL. Jika Anda ingin menguji apakah mereka dimuat, coba jalankan:
SELECT CONVERT_TZ('2012-06-07 12:00:00', 'GMT', 'America/New_York');
Jika mengembalikan DATETIME
(dalam hal ini 2012-06-07 08:00:00
), Anda memiliki zona waktu yang dimuat. Jika mengembalikan NULL
, mereka tidak. Saat tidak dimuat, Anda dibatasi untuk mengonversi menggunakan offset (mis. +10:00
atau -6:00
).
Ini seharusnya berfungsi dengan baik dalam banyak kasus, tetapi ada kalanya lebih baik menggunakan zona waktu bernama, seperti untuk tidak mengkhawatirkan waktu musim panas. Menjalankan perintah berikut memuat data zona waktu dari sistem (khusus Unix. Saya tidak yakin apa perintah Windows yang setara):
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Jika Anda perlu terus mengandalkan zona waktu MySQL, perintah di atas harus dijalankan setiap kali zona waktu sistem diperbarui . Anda juga dapat menambahkannya ke tugas cron mingguan atau bulanan untuk melakukannya untuk Anda secara otomatis.
Kemudian, untuk melihat daftar zona waktu, lakukan saja hal berikut:
USE mysql;
SELECT * FROM `time_zone_name`;
Catatan, info zona waktu membutuhkan sekitar 5 MB di MySQL. Jika Anda ingin membongkar info zona waktu, jalankan perintah berikut dan mulai ulang MySQL:
TRUNCATE `time_zone` ;
TRUNCATE `time_zone_leap_second` ;
TRUNCATE `time_zone_name` ;
TRUNCATE `time_zone_transition` ;
TRUNCATE `time_zone_transition_type` ;
Jangan DROP
tabel ini atau hal buruk akan terjadi.
Sunting:
Berdasarkan komentar pengguna di bawah ini, jika Anda ingin agar zona waktu diperbarui secara otomatis saat Anda memperbarui sistem, Anda harus mengizinkan root untuk masuk terlebih dahulu tanpa dimintai kata sandi.
MySQL>=5.6.6
Jalankan [sumber berikut ini ]:
mysql_config_editor set --login-path=client --host=localhost --user=root --password
MySQL <5.6.6
Buat ~/.my.cnf
file (jika belum ada) dan tambahkan berikut ini:
[client]
user=root
password=yourMysqlRootPW
Kemudian jalankan chmod 600 ~/.my.cnf
untuk memastikan tidak ada orang lain yang dapat membacanya.
Perbarui skrip
Tambahkan skrip berikut ke crontab untuk dieksekusi sekali sehari:
#!/bin/bash
# Find if there are any timezone files that have been modified in the last 24
# hours and do not have ".tab" in the name (since these are not timezone files)
if [ `find /usr/share/zoneinfo -mtime -1 | grep -v '\.tab' | wc -l` -gt 0 ]; then
echo "Updating MySQL timezone info"
# Note, suppressing STDERR here because of the .tab files above
# that cause warnings.
mysql_tzinfo_to_sql /usr/share/zoneinfo 2>/dev/null | mysql -u root mysql
echo "Done!\n"
fi
Hapus echo
baris jika Anda tidak menginginkan keluaran apa pun.
Catatan:Ini (kebanyakan) belum teruji. Beri tahu saya jika Anda memiliki masalah dan saya akan memperbarui jawaban ini.