2010-01-03 20 views
26

Unix zaman damgaları için kullanılacak en iyi alan türü nedir?unix zaman damgası için alan türü

int(10) Bir süreliğine yeterli olacak mı?

+1

Hangi veritabanını kullanıyorsunuz? Ve yerel bir datetime veri türü kullanmazdınız mı? Bir satırı güncelleştirdiğinizde/düzenlediğinizde –

cevap

2

Zaman damgaları için, TIMESTAMP veya DATETIME alan türünü kullanmalısınız.

+3

sql zaman damgası güncellenmiyor mu? – Megaman

+4

Ancak, bu, veri türleri ve dize gösterimleri için veritabanının ve erişim katmanının merhametine sizi koyar, bu da çapraz ortam uygulamalarını yazmayı daha zor hale getirebilir. Karşılaştırma yapmayı umduğun veritabanında başka tarih türleri olmayan davranışları tamamen tahmin edilebilir olan düz tamsayıları kullanmak genellikle daha basit ve kullanışlı olur. – bobince

+0

@Megaman: no. Zaman damgası sadece bir veri türü, herhangi bir özel davranışı yok. – bobince

59

Unix time_t, 32 bit genişliğinde veya 64'tür. Yani int(8) veya binary(8), en azından sonraki 293 milyar yıl için yeterlidir.

+41

Bu cevabın en iyi yanı "en azından önümüzdeki 293 milyar yıl için" dir. –

+2

Lütfen, int (8) 'in, her zaman bu cevabın önerdiği şeyleri yapmadığını unutmayın; [bobince'nin cevabının bir açıklaması var.] (http://stackoverflow.com/a/1993585/2014893) –

+0

Başka birinin Y293B hakkında endişelenmesine izin verin –

12

Bir MySQL INT(n) veri türündeki sayı, ne kadar depolama alanı ayrıldığını belirtmez, yalnızca biçimlendirme amaçlı bir görüntü genişliğidir. Böyle bir INT(10), bir INTEGER ile aynıdır, yani 32 bit imzalı bir sayıdır.

Bu, 32 bitlik bir Unix zaman damgası için kesinlikle uygun bir veri türüdür. Ancak 64 bit zaman damgaları istiyorsanız, yeterli olmayacaktır; BIGINT kullanmanız gerekir.

1

Unix zaman damgası için INT(4) UNSIGNED numaralı telefonu kullanabilirsiniz; bu değer en fazla 4294967295'dir. Bir sonraki ~ 133 yıl boyunca time() değerlerini depolamanız için yeterli. Uygulamanız bu nedenle çalışmayı durduracaksa, uzun süre öleceksiniz;)

Ayrıca, daha az sorunlu olan ve UNIX_TIMESTAMP kullanabileceğiniz Unix zaman damgasına dönüştürmek istediğiniz zaman TIMESTAMP veri türünü kullanmayı da deneyebilirsiniz () işlevi.

ex.

SELECT UNIX_TIMESTAMP(col_timestamp) FROM tbl_name; 
İlgili konular