Bagaimana cara menetapkan kolom cap waktu yang nilai default-nya adalah waktu UTC saat ini?
MySQL menggunakan UTC_TIMESTAMP()
fungsi untuk stempel waktu UTC:
mysql> SELECT UTC_TIMESTAMP();
+---------------------+
| UTC_TIMESTAMP() |
+---------------------+
| 2012-07-01 11:36:35 |
+---------------------+
1 row in set (0.00 sec)
Jadi saya sudah mencoba:
CREATE TABLE `blah` (
`creation_time` TIMESTAMP DEFAULT UTC_TIMESTAMP,
...
Dan variasi lainnya, seperti UTC_TIMESTAMP()
, tetapi tidak berhasil.
CURRENT_TIMESTAMP
?MySQL converts TIMESTAMP values from the current time zone to UTC for storage, and back from UTC to the current time zone for retrieval.
CURRENT_TIMESTAMP
). Dari halaman dokumentasi yang sama:(This does not occur for other types such as DATETIME.)
.Jawaban:
Untuk mengikuti komentar @ ypercube yang
CURRENT_TIMESTAMP
disimpan sebagai UTC tetapi diambil sebagai zona waktu saat ini, Anda dapat memengaruhi pengaturan zona waktu server Anda dengan opsi --default_time_zone untuk pengambilan. Ini memungkinkan pengambilan Anda untuk selalu berada di UTC.Secara default, opsinya adalah 'SYSTEM' yang mengatur zona waktu sistem Anda (yang mungkin atau mungkin bukan UTC!):
Anda dapat mengatur ini secara dinamis:
Atau secara permanen di my.cnf Anda:
Mulai ulang server Anda, dan Anda akan melihat perubahan:
sumber
default_time_zone
tabel atau database tertentu? Terima kasih.Anda tidak dapat menentukan
UTC_TIMESTAMP
sebagai default untuk menentukan properti otomatis, Anda harus menggunakan hanya DEFAULTCURRENT_TIMESTAMP
danON UPDATE CURRENT_TIMESTAMP
klausa.Anda juga bisa INSERT
UTC_TIMESTAMP
nilai seperti ini untuk tabel:INSERT query akan seperti ini untuk memasukkan UTC_TImeSTAMP:
sumber
Solusi saya adalah dengan pemicu:
Maka setiap baris yang dimasukkan baru akan memiliki timestamp di UTC.
sumber
untuk mariadb hanya solusi my.cnf global yang berfungsi
untuk mariadb 10.2, solusi permanen dari @Derek Downey di posting ini.
untuk mariadb 10.0 (saya punya 10.0.32), lihat https://stackoverflow.com/questions/947299/how-do-i-make-mysqls-now-and-curdate-functions-use-utc
kedua definisi dapat hidup berdampingan di my.cnf dari mariadb 10.2, tetapi saya tidak memiliki mariadb 10.0 lagi.
Semoga ini bisa membantu Anda.
sumber