Giriş
Eğer düz SQL kullanıyorsak TIMESTAMP sütunu time_zone değişkeninden etkilenir. Veri tabanının saat diliminden etkilendiğini görmek için şöyle yaparız.mysql> show variables like '%time_zone%';
+------------------+---------------------+
| Variable_name | Value |
+------------------+---------------------+
| system_time_zone | India Standard Time |
| time_zone | Asia/Calcutta |
+------------------+---------------------+
mysql> create table datedemo(
-> mydatetime datetime,
-> mytimestamp timestamp
-> );
mysql> insert into datedemo values ((now()),(now()));
mysql> select * from datedemo;
+---------------------+---------------------+
| mydatetime | mytimestamp |
+---------------------+---------------------+
| 2011-08-21 14:11:09 | 2011-08-21 14:11:09 |
+---------------------+---------------------+
mysql> set time_zone="america/new_york";
mysql> select * from datedemo;
+---------------------+---------------------+
| mydatetime | mytimestamp |
+---------------------+---------------------+
| 2011-08-21 14:11:09 | 2011-08-21 04:41:09 |
+---------------------+---------------------+
2. Varsayılan Değer
Bence kullanım şekli şöyle olmalı
-- Kullanmayın
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-- Kullanın
ts TIMESTAMP DEFAULT (UTC_TIMESTAMP)
2.1 CURRENT_TIMESTAMP
Varsayılan değer olarak CURRENT_TIMESTAMP() Kullanıyorsak - time_zone'dan etkilenir. ÖrnekŞöyle yaparız. CURRENT_TIMESTAMP ile NOW() aynı şeyler
CREATE TABLE t1 ( ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
Şöyle yaparız. Şu anda bağlantımın time_zone ayarı UTC olduğu için bilgisayarımın saati 10:59 olmasına rağmen, 07:59 olarak kaydediyor.
INSERT INTO t1() VALUES();
SELECT * FROM t1;
+---------------------+---------------------+
| ts | dt |
+---------------------+---------------------+
| 2021-11-26 07:59:12 | 2021-11-26 07:59:12 |
+---------------------+---------------------+
1 row in set (0.00 sec)
time_zone değerini değiştirelimSET @@session.time_zone = '+03:00';
Bu sefer farklı sonuç alırız.INSERT INTO t1() VALUES();
Query OK, 1 row affected (0.04 sec)
mysql> SELECT * FROM t1;
+---------------------+---------------------+
| ts | dt |
+---------------------+---------------------+
| 2021-11-26 10:59:12 | 2021-11-26 10:59:12 |
+---------------------+---------------------+
1 row in set (0.00 sec)
2.2 UTC_TIMESTAMPDolayısıyla bağlantının time_zone ayarı değişikliğinden etkilenmemek için UTC_TIMESTAMP() kullanılır. Ancak bazı eksikler var. Şöyle yapamıyorum, MySQL hata veriyor
CREATE TABLE t1 ( ts TIMESTAMP DEFAULT (UTC_TIMESTAMP) ON UPDATE (UTC_TIMESTAMP), dt DATETIME DEFAULT (UTC_TIMESTAMP) ON UPDATE (UTC_TIMESTAMP));
Ancak şöyle yapabiliyorum. Bu durumda ON UPDATE özelliği olmuyor. Bununla ilgili bir hata açılmış.CREATE TABLE t1 ( ts TIMESTAMP DEFAULT (UTC_TIMESTAMP), dt DATETIME DEFAULT (UTC_TIMESTAMP));
Precision için şöyle yaparızCREATE TABLE t1 ( ts TIMESTAMP(6) DEFAULT (UTC_TIMESTAMP), dt DATETIME(6) DEFAULT (UTC_TIMESTAMP));
Bu sefer çıktı farklıdırmysql> INSERT INTO t1() VALUES();
Query OK, 1 row affected (0.03 sec)
mysql> SELECT * FROM t1;
+----------------------------+----------------------------+
| ts | dt |
+----------------------------+----------------------------+
| 2021-11-26 08:17:46.000000 | 2021-11-26 08:17:46.000000 |
+----------------------------+----------------------------+
1 row in set (0.00 sec)
Hiç yorum yok:
Yorum Gönder