DATETIME alanları üzerinde damgaları ne kadar yaygındır?

5 Cevap php

Ben veritabanından bir veri bilgi çekin ve bir sayfada görüntülemeden önce kullanıcı dilimine dönüştürmek için, orada her diğer web ürün gibi, benim ürünü istiyorum. PHP ve MySQL kullanıyorum.

TIMESTAMP alanların kullanımı DATETIME alanların kullanımı daha sık mi?

Benim araştırma, bu DATETIME alanlarını kullanarak, ben olurdu gibi görünüyor

  1. UTC tüm tarih bilgilerini saklamak
  2. date_default_timezone_set('UTC') her zaman uygulama başlar çağrı
  3. elle kullanıcının UTC () geçerli tarih / zamana dayalı olan tarih kullanılarak oluşturulan tarihlerinde saat ofset çıkarma
  4. elle tarihe göre geçti ve biçimlendirilmiş mevcut tarihlerinin kullanıcının UTC offset çıkarmak saat ()

Benim tarih alanları için zaman damgaları kullanarak, sadece bir veritabanı bağlantısı yapıldığında, aşağıdaki çalıştırmak zorunda olacak gibi görünüyor: SET time_zone = 'Kullanıcıların dilimi' (örn. Amerika / Los_Angelos).

Bu göz önüne alındığında, çoğu kişi damgaları kullanarak yerine tarihsaat meyilli olacağını anlamak istiyorum ... Bu doğru mu?

5 Cevap

this yerden:

The SQL Server timestamp data type has nothing to do with times or dates. SQL Server timestamps are binary numbers that indicate the relative sequence in which data modifications took place in a database. The timestamp data type was originally implemented to support the SQL Server recovery algorithms.

Edit: TIMESTAMP genel Tarih / Saat bilgi depolamak için kullanılmak üzere tasarlanmamıştır gibi soruyu cevaplamak için, DATETIME daha yaygın kullanılır.

Hayır, ben tam olarak öyle düşünmüyorum.

Sitenizin içine girmiş olduğunda, bir şey oluyor tarih ve saati - Genellikle, sadece depolamak için datetime kullanın. Sen veriler programın kullanımı için sitenizin içine girdiğinde takip etmek için zaman damgası kullanın. datetime kullanıcıya çıkış olarak mantıklı için düzgün sunmak için daha fazla seçenek var oysa - işin tüm db sunucunun saat diliminde olur çünkü damgası zaman dilimleri izlemek zorunda olmamalıdır.

Yani, "kullanıcı-dilimi verileri sunmak için daha yaygın olan" soru için, ben cevap DATETIME olduğunu söyleyebilirim.

TIMESTAMP alan sık eşzamanlılık denetimi desteklemek için kullanılır. Bir tablo rekor bir kullanıcı tarafından modifiye edilirken, bir form veya başka bir mekanizma sayesinde, veritabanını bu kullanıcı sadece okumak aynı kaydı güncelleme olduğunu bilir çünkü kullanıcı kendi kayıt değişiklikleri {[(0 ile göndererek TIMESTAMP )]}

Başka bir kullanıcı gerçekleştirmeden önce ilk kullanıcıya kaydı değiştirir eğer, ilk kullanıcı okuma artık veritabanında ZAMAN maç olur ZAMAN kaydedin. Ne olur bir sonraki sistem eşzamanlılık ihlalleri nasıl işleyeceğini bağlıdır. Bazı sistemler kaydetmek önlemek olacaktır. Onlar diğer kişinin değişikliklerin üzerine isterseniz diğer sistemler ilk kullanıcı soracaktır.

Eğer zaman dilimi manipülasyon yapmak gerekir, ve 1970 yılından önce veya 2038 sonrasında tarihlerini saklamak için ihtiyacınız yoksa, damgaları kullanın.

Sen tek bir SQL deyimi yapabilirsiniz:

set timezone='America/New_York';

Ve veritabanından alınan tüm tarihleri ​​EDT olacaktır.

Doğru olguların tüm işlemek için zor olur gibi ben UTC offset matematik yapıyor önleyeceğini. Yapabileceğiniz en iyi şey, her kullanıcı için uygun PHP ve MySQL timezones ayarlamaktır.

Damgaları mağaza SADECE UTC olarak Tarihleri ​​ve MySQL bunun için çeviri işler.

Tarihleri ​​saklarken:

set time_zone='America/New_York';
insert into SomeTable ( Name, Created, Modified ) VALUES ( 'Dude', '2009-06-15 11:54:00', '2009-06-15 11:54:00');
set time_zone='GMT';
SELECT * FROM SomeTable ORDER BY ID DESC LIMIT 1;
+----+------+---------------------+---------------------+
| ID | Name | Created             | Modified            |
+----+------+---------------------+---------------------+
|  1 | Dude | 2009-06-15 15:54:00 | 2009-06-15 15:54:00 | 
+----+------+---------------------+---------------------+

Sadece kullanıcı olduğu bölgeye veritabanı saat dilimini ayarlayın ve sağ GMT tarihi için o olacak doğru "gizli".

Sadece emin olun yapmanız PHP ve MySQL hem de değil "çifte dönüştürmek" tarih.

Oluşturulduğu ya da satır değişikliği autoupdated edilebilir ki TIMESTAMP özeldir. timestamp docs bakın.

Eğer MySQL kısmında automagic davranış istediğiniz sürece Temelde, kullanın DATETIME. DATETIME, aynı zamanda daha geniş bir aralığı temsil edebilir.