Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Zona Waktu MySQL

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kembalikan hasil default untuk nilai IN terlepas

  2. MySQL Errno 150

  3. Cara Mengakses PhpMyAdmin tanpa login cPanel

  4. Akses ditolak untuk pengguna '[email protected]' (menggunakan sandi:TIDAK)

  5. mysql pilih nilai baris dinamis sebagai nama kolom, kolom lain sebagai nilai