Manuel (section 9.6):
The current values of the global and client-specific time zones can be retrieved like this:
mysql> SELECT @@global.time_zone, @@session.time_zone;
Edit Yukarıdaki döner SYSTEM
MySQL daha az yararlı olan sistemin zaman dilimi, köle ayarlı ise. PHP kullanarak konum beri MySQL cevap SYSTEM
ise, daha sonra it's üzerinden kullanarak ne timezone sistemini sorabilirsiniz date_default_timezone_get
{[(5) ]}}] aynı zaman dilimi bir huge sıçrama değildir [aslında {[(6) değilse].) Ama ({(PHP kullanan dilimini ayarlayabilirsiniz) MySQL gibi sakının [(8)]} a>), bu işletim sistemi kullanan daha farklı bir değer bildirebilir demektir. Eğer PHP kodu kontrol iseniz, size bu yaptığınızı olmadığını bilmek ve iyi olmalıdır.
Bunun içinde ne timezone sunucuyu soran absolutely nothing veritabanındaki veriler hakkında size söyler çünkü Ama MySQL sunucusu kullanarak hangi zaman dilimi içinde bütün soru, bir teğet olabilir. Detaylar için okumaya:
Further discussion:
Eğer sunucu kontrolü iseniz, tabii ki zaman dilimi bilinen bir miktar olduğundan emin olabilirsiniz. Eğer sunucu kontrolü değilseniz, sizin connection böyle tarafından kullanılan zaman dilimini ayarlayabilirsiniz:
set time_zone = '+00:00';
Başka işlemler (Örn: now()
) GMT kullanacağını böylece, GMT zaman dilimini ayarlar.
Olsa da, bu zaman ve tarih değerleri not MySQL timezone bilgileri hafızaya Not:
mysql> create table foo (tstamp datetime) Engine=MyISAM;
Query OK, 0 rows affected (0.06 sec)
mysql> insert into foo (tstamp) values (now());
Query OK, 1 row affected (0.00 sec)
mysql> set time_zone = '+01:00';
Query OK, 0 rows affected (0.00 sec)
mysql> select tstamp from foo;
+---------------------+
| tstamp |
+---------------------+
| 2010-05-29 08:31:59 |
+---------------------+
1 row in set (0.00 sec)
mysql> set time_zone = '+02:00';
Query OK, 0 rows affected (0.00 sec)
mysql> select tstamp from foo;
+---------------------+
| tstamp |
+---------------------+
| 2010-05-29 08:31:59 | <== Note, no change!
+---------------------+
1 row in set (0.00 sec)
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2010-05-29 10:32:32 |
+---------------------+
1 row in set (0.00 sec)
mysql> set time_zone = '+00:00';
Query OK, 0 rows affected (0.00 sec)
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2010-05-29 08:32:38 | <== Note, it changed!
+---------------------+
1 row in set (0.00 sec)
Yani sunucunun dilimi bilerek böyle now()
, unix_timestamp()
, vb gibi hemen zaman olsun fonksiyonları açısından sadece önemli değil; size veritabanı veri tarihleri kullanarak ne timezone hakkında hiçbir şey söylemez. Sen assume onlar sunucunun dilimini kullanılarak yazılmıştır seçebilirsiniz, ama bu varsayım da kusurlu olabilir. Veri depolanan herhangi bir tarih veya saat dilimini bilmek için, onlar timezone bilgi depolanan veya (benim yaptığım gibi) onlar GMT hep konum sağlamak konum sağlamak için var.
Neden veri sunucunun dilimini kusurlu kullanılarak yazılmış üstleniyor? Peki, bir şey için, verileri farklı bir zaman dilimini bir bağlantıyı kullanarak yazılmış olabilir. Veritabanı sunucuları (I California Texas taşınmıştı bir veritabanı miras zaman o içine koştum) farklı saat dilimleri nerede başka, bir sunucudan taşınmış olabilir. Ama even if veri mevcut zaman dilimi ile, sunucu üzerinde yazılı, hala muğlak. Geçen yıl, Amerika Birleşik Devletleri, Yaz Saati 1 Kasım tarihinde 02:00 kapalıydı. Benim sunucu Pasifik dilimini kullanarak Kaliforniya ve ben veritabanında 2009-11-01 01:30:00
değerine sahip varsayalım. Ne zaman oldu? Miydi 01:30 1 Kasım PDT, ya da 01:30 1 Kasım PST (bir saat sonra)? Sen bilmenin hiçbir yolu yoktur. Kıssadan hisse: Her zaman (DST yapmaz ki) GMT tarihleri / süreleri depolamak ve gerektiğinde / gibi istenilen zaman dilimi dönüştürmek.