2010-01-08 14 views
8

Zaman damgasını depolamak için MySQL'de büyük bir tamsayı mı yoksa düzenli bir tam sayı mı kullanmalıyım? INT türünde bir INT'de depolamayı planlıyorum, zaman damgasında veya tarihte değil, hangi INT tipini kullanmalıyım?Bir zaman damgasını depolamak için MySQL'de büyük bir INT veya normal INT kullanmalı mıyım?

+0

(http://dev.mysql.com/doc/refman/5.1/en/timestamp.html bakınız) en iyi detaylar için kılavuzu incelemek, tüm bilgi şimdi mysql değişti modası geçmiş görünüyor zaman damgası alanlarının biçimi, datetime ile tam olarak aynı olacak – JasonDavis

cevap

11

Int için ters dönecek :-) kurtarmak alacağınızı ediyorum devlet olmadığından 2038'de bir negatif (UNIX zaman damgası kullanıyorsanız): http://en.wikipedia.org/wiki/2038_problem.

yüzden BIGINT ben tamamen size ne yapmak istediğinize bağlıdır düşünüyorum muhtemelen en güvenli seçenek

+1

Artık bir y2k38 problemi olmayacak bir y2k38 problemi olmayacak. 2030 civarı bir yerde, 64-bit zaman damgalarını kullanmak için tüm veritabanlarını değiştirmeye başlayan çılgın bir acele olacak ve bu en azından, tamsayılar yerine tablolarda akıllıca zaman çizelgesi kullanan kişiler için kolay olacak :-) – paxdiablo

+2

* shrug * ... Eğer imzasız bir int yaparsanız, 2100'e ve bazılarına kadar çıkabilirsiniz (sayıları vermeyi sürdüren bir işleviniz varsa ve bunları dönüştürdüğünüz sürece) –

+0

Eh. Veritabanları ile çalışmak için bigint kullanan akıllı insanlar var (veri tabanları veritabanları veri tabanı + pazarlama için değil), veri tabanları ile datetime formatları veya herhangi bir veritabanının sürümleri ile taşınabilirlik ve sorunlar. Int Int'dir. ve Oracle, SQL, MySQL, MariaDb ve diğerleri ile sorun değil. Datatimes türleri, çeşitli veritabanları güncellemeleri, conpatibilties ile google arama çok fazla sorun .. Mucha veces no es cuestion de inteligencia, es cuestion de experiencia ;-) Çoğu zaman bir zeka meselesi değildir, bir deneyim meselesidir ;-) – abkrim

13

DBMS zaman damgası verisi için en iyi duruma getireceği için büyük olasılıkla bir zaman damgası içinde saklamalısınız.

MySQL geliştiricilerinin, zaman damgalarının gerektiği gibi çalıştığını ve bunu kesinlikle işe yaramayacak bir şeyle değiştirmesini sağladıkları tüm zor işleri neden feda edeceğinizi merak ediyorum.

Eğer bir tamsayı neden kullanmak istediğinizi, ben sadece geçici delilik olduğunu varsaymak gidiyor ve yakında

+1

Genellikle, php ve diğer bu tür diller, düzgün bir sql tarih biçimiyle olduğundan daha fazla zaman damgalarıyla çalışmayı kolaylaştırdığından kullanılırlar. –

+1

Bu durumda, DB'de olanın altında yatan time_t değerini almak için UNIX_TIMESTAMP() öğesini kullanırdım. – paxdiablo

+0

Benim durumumda sadece çalışır, mysql yeni sürümleri hem datetime ve zaman damgası bu formatta şimdi 0000000 yerine 0000-00-00 (sayı ve tire kapalı olabilir ama fikir alırsınız. Zaman damgası gerçek bir zaman damgası olarak kullanılır. ama benim zaman fonksiyonlarının hepsi mysql'den gerçek bir zaman damgasına ihtiyaç duyar, bu yüzden bir INT'de bir zaman damgasını saklarsam daha az yer kullanır ve daha az işleme/geri dönüş yapar.Söylediğim gibi, tüm işlevlerim bir zaman damgasına ihtiyaç duyar, bu yüzden daha yeni stil zaman damgasını verirsek, bunu php'de gerçek bir zaman damgasına dönüştürmem gerekir. – JasonDavis

9

olduğunu. Orada zaman/tarih türleri için birkaç uygun türleri (bkz: http://dev.mysql.com/doc/refman/5.0/en/date-and-time-type-overview.html)

  • DATE - genellikle 3 byte, aralık: 1000-01-019999-12-31 için.
  • DATETIME-8 bayt, aralık 1000-01-01 00:00:00
  • TIMESTAMP9999-12-31 23:59:59 göre - 4 bayt 1970-01-01 00:00:01 UTC UTC 2038-01-19 03:14:07 arasında değişir. Ardından, bilinmesi gereken bazı anlamsal sorunlar vardır:

  • tarih saklar takvim günü, datetime (int TIMESTAMP gibi 4 bayt, büyük tamsayı DATETIME gibi 8 bayt) ve her iki mağaza damgası ikinci bir hassasiyette tarih + saati (tarih-ikincisi, tarih aritmetiğinde desteklenir, ancak depolama için desteklenmez)
  • zaman damgası bir UTC değerini depolar. Yani, orada yapıştırdığınız herhangi bir değer, oturumun saat diliminden (varsayılan olarak sunucunun saat dilimi) UTC'ye dönüştürülür ve saklanır. Alımda, UTC değeri tekrar oturumda geçerli olan zaman dilimi geri dönüştürülür.
  • zaman damgası, ekleme veya güncelleştirme veya her ikisi de geçerli zaman damgasını otomatik olarak almak için bildirilebilir. Ben DÜZGÜN MySQL ve PHP kullanıcılar için saat dilimleri yapmak için net geçerli bir öğretici olsaydı
İlgili konular