Veritabanında milisaniye ile zaman depolama


10

Bir veritabanında "zaman" depolamak ile ilgili kısa bir soru. 00: 00: 00: 00 (saat, dakika, saniye, milisaniye) biçimindeki kullanıcıların çalıştığı zamanı kaydediyorum.

Başlangıçta olarak saklayacaktım TIMEama sonra MySQL'in bu tür milisaniyeleri desteklemediğini fark ettim.

Kullanıcıların kronometresinden alınan gerçek zamanı saklayacağım, koştukları ve bitirdikleri zamanı değil (bu yerleştirilmeden önce hesaplanacak).

Kullanılacak en iyi alan türü hangisidir? Ben de düşünüyordum ya doubleda floatişe yarayacağından emin değilim?

Yanıtlar:


6

Şahsen, süre için tamsayı türleri kullanırdım

Örnek: İşaretsiz bir int sütununda 340.000 milisaniye 340000'dür.

Bana göre, tarih, saat, tarih vb. Zamandaki açık noktalar içindir. 340 saniye bu bağlamda anlamsız. Başlangıç ​​yapmak date/time, sürenin eklenmesine elbette izin verir


3
intervalSadece bu amaçla standart bir SQL veri türü vardır. Ancak tüm DBMS (ve kesinlikle MySQL değil) bunu desteklemez.
a_horse_with_no_name

Cevabınız için teşekkürler, şu anda 00: 00: 00: 00 biçiminde olduğu gibi standart bir biçime dönüştürmem gerekir mi? Sütunu bu biçime izin verecek şekilde ayarlayabilir miyim?
Elliott

@Elliott: görüntüleme için yapabilirsin. Aksi takdirde sadece bir sayı
gbn

1
Biçiminizin muhtemelen (veya okunabilirlik için olması gerektiğini) unutmayın: 00: 00: 00.000 (iki nokta üst üste yerine noktayı ve milisaniye için 3 rakamı not edin.
Jannes

2

Ne kadar süre ölçmek istediğinize bağlıdır. 2 ^ 32 veya 4294967296 ms'den daha uzun bir süre kayıt yapmayacaksanız, normal bir imzasız int'den daha iyi. Bu yaklaşık 50 gün saat zamanına karşılık gelir, btw.

Unix zaman damgalarını veya daha büyük aralıkları saklıyorsanız, bigint kullanmaya bakın. Bu size 8 bayt alan veya 1.84467440737096e + 19 ms'de (yaklaşık 500 Milyon yıl) süreleri kaydetme olanağı sağlar.


1

MySQL 5.6.4 veya üstünü kullanıyorsanız, 6'ya kadar kesirli basamağı saklamak için TIME(3), DATETIME(3)ve TIMESTAMP(3)sütun türlerini kullanabilirsiniz ( 3ihtiyacınız olan kesirli basamak sayısıyla değiştirin ). Noktadan sonra zaman dizisine kesirli kısım eklenir; Örnek: 2018-09-08 17:51:04.781.

Resmi referans

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.