Tidak, tidak mungkin mengubah zona waktu untuk satu database dalam instance MySQL.
Kami dapat mengambil kembali time_zone
server dan klien pengaturan dengan kueri, seperti ini:
SELECT @@global.time_zone, @@session.time_zone;
Kami juga dapat mengubah zona waktu klien untuk satu sesi, atau mengubah zona waktu untuk seluruh instance MySQL.
Namun kita harus benar-benar menyadari implikasi bahwa perubahan ini akan terjadi pada koneksi klien yang ada, dan bagaimana DATETIME
dan TIMESTAMP
nilai yang sudah disimpan dalam instance akan diinterpretasikan.
Untuk mengatur zona waktu server saat startup instance MySQL, kita dapat memodifikasi /etc/my.cnf
file (atau dari mana pun parameter inisialisasi instance mysql dibaca), di bawah [mysqld]
bagian:
[mysqld]
default-time-zone='+00:00'
-- atau --
Dimungkinkan juga (kurang diinginkan) untuk menambahkan --default_time_zone='+00:00'
opsi ke mysqld_safe
CATATAN: Mengubah pengaturan zona waktu di server MySQL TIDAK mengubah nilai yang disimpan di kolom DATETIME atau TIMESTAMP yang ada, TETAPI karena secara efektif mengubah konteks di mana nilai yang disimpan tersebut ditafsirkan, itu akan terlihat seperti semua nilai DIgeser. (Di mana 08:00 dianggap berarti 08:00 CST, dengan zona waktu server diubah dari CST ke GMT, '08:00' yang sama sekarang akan diambil menjadi 08:00 GMT, yang secara efektif akan menjadi 02:00 CST.
Juga perlu diingat bahwa kolom TIMESTAMP selalu disimpan dalam UTC, sedangkan kolom DATETIME tidak memiliki zona waktu.http://dev.mysql.com/doc/refman/5.5/en/datetime.html
Setiap sesi klien dapat mengubah pengaturan zona waktu untuk sesi mereka sendiri:
SET time_zone='-06:00';
Namun semua ini tidak benar-benar "menyelesaikan" masalah konversi zona waktu, itu hanya memindahkan masalah konversi.
Tidak ada yang secara inheren "buruk" dengan lapisan aplikasi yang menangani konversi zona waktu; terkadang, itulah tempat terbaik untuk menangani. Itu hanya harus dilakukan dengan benar dan konsisten.
(Yang aneh tentang pengaturan yang Anda jelaskan adalah bahwa aplikasi menyimpan nilai DATETIME seolah-olah zona waktu server MySQL diatur ke GMT, tetapi zona waktu server MySQL diatur ke sesuatu yang lain.)