Menyimpan waktu dengan milidetik dalam basis data

10

Hanya pertanyaan singkat tentang menyimpan "waktu" dalam database. Saya mencatat waktu pengguna menjalankan yang dalam format 00: 00: 00: 00 (jam, menit, detik, milidetik).

Saya awalnya akan menyimpannya TIMEtetapi kemudian saya menyadari MySQL tidak mendukung milidetik dalam jenis ini.

Saya akan menyimpan waktu aktual yang diambil dari stopwatch pengguna, bukan waktu mereka berlari dan selesai (ini akan dihitung sebelum dimasukkan).

Apa jenis bidang terbaik yang akan digunakan? Aku sedang berpikir doubleatau tidak float, tapi aku tidak yakin itu akan berhasil?

Elliott
sumber

Jawaban:

6

Secara pribadi, saya akan menggunakan tipe integer untuk durasi

Contoh: 340.000 milidetik adalah 340000 dalam kolom int yang tidak ditandatangani.

Bagi saya, waktu, waktu, tanggal dll adalah untuk titik-titik eksplisit dalam waktu. 340 detik tidak ada artinya dalam konteks itu. Memiliki awal date/timememungkinkan durasi ditambahkan tentu saja

gbn
sumber
3
Ada intervaltipe data SQL standar untuk tujuan ini. Tetapi tidak semua DBMS (dan tentunya bukan MySQL) mendukung hal ini.
a_horse_with_no_name
Terima kasih atas jawaban Anda, apakah saya perlu mengubahnya ke format standar karena saat ini dalam format 00: 00: 00: 00? Bisakah saya mengatur kolom untuk mengizinkan jenis format itu?
Elliott
@ Eiott: untuk tampilan, Anda bisa. Itu hanya angka sebaliknya
gbn
1
Perhatikan bahwa format Anda mungkin (atau seharusnya untuk dibaca) 00: 00: 00.000 (perhatikan titik alih-alih titik dua dan 3 digit selama milidetik.
Jannes
2

Itu tergantung pada berapa lama Anda ingin mengukur. Jika Anda tidak akan merekam lebih lama dari 2 ^ 32, atau 4294967296 ms daripada int unsigned biasa saja. Itu sesuai dengan sekitar 50 hari waktu jam, btw.

Jika Anda menyimpan cap waktu unix atau interval yang lebih besar maka lihat menggunakan bigint. Ini memberi Anda 8 byte ruang, atau kemampuan untuk merekam waktu selama 1.84467440737096e + 19 ms (yang kira-kira 500 Juta tahun)

atxdba
sumber
1

Jika Anda menggunakan MySQL 5.6.4 atau lebih baru, Anda bisa menggunakan TIME(3), DATETIME(3)dan TIMESTAMP(3)jenis kolom untuk menyimpan hingga 6 digit fraksional (ganti 3dengan jumlah digit fraksional yang Anda butuhkan). Bagian pecahan ditambahkan ke string waktu setelah titik; Contoh: 2018-09-08 17:51:04.781.

Referensi resmi

Kemahiran
sumber