SORU
29 Mayıs 2010, CUMARTESİ


Nasıl MySQL geçerli saat dilimini alabilirim?

Eğer MySQL gibi bir işlevi varsa bilir?

GÜNCELLEME

Bu herhangi bir geçerli bilgi çıkış yok:

mysql> SELECT @@global.time_zone, @@session.time_zone;
 -------------------- --------------------- 
| @@global.time_zone | @@session.time_zone |
 -------------------- --------------------- 
| SYSTEM             | SYSTEM              |
 -------------------- --------------------- 

Ya da belki MySQL kendisi mi olduğunu tam olarak time_zone eskiden,sorun değil, biz dahil PHP buraya kadar alabilirim geçerli bir bilgi değil gibi SYSTEM...

CEVAP
29 Mayıs 2010, CUMARTESİ


Kılavuzu (section 9.6):

Genel ve müşteriye özgü zaman dilimleri geçerli değerler bu şekilde alınabilir:
mysql> SELECT @@global.time_zone, @@session.time_zone;

EditYukarıdaki eğer MySQL yararlı daha az sistem zaman dilimi, köle için ayarlanmışsa SYSTEM döndürür. PHP kullanarak konum beri, eğer MySQL gelen cevap ise SYSTEM o zaman dilimimi ne sistem sorabilirsinizdate_default_timezone_get) kullanarak. VolkerK belirttiği gibi (tabii ki, PHP farklı bir sunucu üzerinde çalışıyor olabilir, ama varsayımlar, web sunucusu ve konuşuyor DB sunucu üstleniyorayarlayın[aslında değilaynı zaman dilimini bir değilbüyükartık.) Ama dikkat (MySQL gibi), işletim sistemi kullandığından farklı bir değer bildirebilir demek ki PHP kullanır (date_default_timezone_set), o zaman dilimini ayarlayabilirsiniz. Eğer PHP kodu kontrol ediyorsanız, bu yaptığın olup olmadığını bilmek ve bir sorun çıkmaz.

Ama MySQL sunucusunu kullanarak tüm bu soru o zaman dilimi ne sunucu soruyor size söyler, çünkü bir teğet olabilirkesinlikle hiçbir şeyveritabanındaki verileri hakkında. Ayrıntılar için okumaya devam edin:

Daha fazla tartışma:

Eğer sunucu kontrolü iseniz, tabii ki zaman dilimini bilinen bir miktar olduğundan emin olun. Eğer sunucu kontrolü sizde değilse, saat dilimi belirlerbağlantıbu gibi:

set time_zone = ' 00:00';

O başka işlemleri (now()) GMT kullanacağı GMT zaman dilimini ayarlar.

Saati ve tarihi değerleri unutmayındeğilMySQL ile dilimi bilgileri saklı:

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)

Sunucunun zaman dilimini şimdi zamanı olsun fonksiyonları açısından önemlidir, now(), unix_timestamp(), vb gibi çok bilen.; veritabanı veri tarihler ile ilgili bir şey söylemez. Seçebilirsinizvarsayalımsunucunun saat dilimi kullanarak yazılmış, ama bu tahminim de Kusurlu olabilir. Herhangi bir tarih veya saat veri saklanan zaman dilimini bilmek, saat dilimi bilgileri saklı ya da (benim gibi) onlar emin olun her zaman GMT garanti etmez.

Neden veri yazıldı varsayarak kusurlu sunucunun zaman dilimini kullanıyor? Peki, bir şey için, verileri farklı bir zaman dilimine ayarlanmış bir bağlantı kullanarak yazılmış olabilir. Veritabanı sunucuları farklı saat dilimleri içinde olduğu başka bir server (California Texas taşınmış bir veritabanı miras kaldı o zaman karşılaştım) taşınmış olabilir. Amabileveriler sunucu üzerinde yazılır, şu anki zaman dilimi, hala belirsiz. Geçen yıl, Amerika Birleşik Devletleri'nde, Yaz Saati uygulaması 1 Kasım'da 2:00'da kapatılmış. California Pasifik zaman dilimi kullanarak benim sunucu olduğunu varsayalım ve veritabanındaki değeri 2009-11-01 01:30:00 var. Ne zaman oldu? 1:30 'da 1 Kasım PST veya 1:30' da 1 Kasım PST (bir saat sonra)? Bilmenin hiçbir yolu yoktur. Kıssadan hisse: her Zaman tarih GMT DST yapmaz)/süreleri depolamak ve gerektiğinde/olarak istenilen saat dilimi dönüştürmek.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FILIPeeeK

    FILIPeeeK

    22 Mayıs 2006
  • Marina and The Diamonds

    Marina and T

    8 Temmuz 2008
  • Numberphile

    Numberphile

    15 EYLÜL 2011