Lưu trữ thời gian với mili giây trong cơ sở dữ liệu


10

Chỉ cần một câu hỏi nhanh về việc lưu trữ "thời gian" trong cơ sở dữ liệu. Tôi đang ghi lại thời gian người dùng chạy ở định dạng 00: 00: 00: 00 (giờ, phút, giây, mili giây).

Ban đầu tôi định lưu trữ nó TIMEnhưng sau đó tôi nhận ra MySQL không hỗ trợ mili giây trong loại này.

Tôi sẽ lưu trữ thời gian thực tế lấy từ đồng hồ bấm giờ của người dùng, không phải thời gian họ chạy và kết thúc (điều này sẽ được tính trước khi chèn).

Điều gì sẽ là loại trường tốt nhất để sử dụng? Tôi đã suy nghĩ doublehoặc float, nhưng tôi không chắc rằng nó sẽ làm việc?

Câu trả lời:


6

Cá nhân, tôi sử dụng các loại số nguyên cho thời lượng

Ví dụ: 340.000 mili giây là 340000 trong một cột int không dấu.

Đối với tôi, datetime, thời gian, ngày, vv là cho các điểm rõ ràng trong thời gian. 340 giây là vô nghĩa trong bối cảnh đó. Có một khởi đầu date/timecho phép thời lượng được thêm vào tất nhiên


3
Có một intervalkiểu dữ liệu SQL tiêu chuẩn cho mục đích này. Nhưng không phải tất cả DBMS (và chắc chắn không phải MySQL) đều hỗ trợ điều này.
a_horse_with_no_name

Cảm ơn câu trả lời của bạn, tôi có cần chuyển đổi nó sang định dạng chuẩn như hiện tại nó có định dạng 00: 00: 00: 00 không? Tôi có thể đặt cột để cho phép loại định dạng đó không?
Elliott

@Elliott: để hiển thị, bạn có thể. Nó chỉ là một con số khác
gbn

1
Lưu ý rằng định dạng của bạn có thể là (hoặc nên dành cho khả năng đọc) 00: 00: 00.000 (lưu ý dấu chấm thay vì dấu hai chấm và 3 chữ số cho mili giây.
Jannes

2

Nó phụ thuộc vào thời gian bạn muốn đo. Nếu bạn sẽ không ghi lại bất kỳ thời gian nào dài hơn 2 ^ 32 hoặc 4294967296 ms so với số nguyên không dấu thông thường thì vẫn ổn. Điều đó tương ứng với khoảng 50 ngày thời gian, btw.

Nếu bạn đang lưu trữ tem thời gian unix hoặc khoảng thời gian lớn hơn thì hãy xem sử dụng bigint. Điều này cung cấp cho bạn 8 byte dung lượng hoặc khả năng ghi lại thời gian dài ở mức 1.84467440737096e + 19 ms (tương đương khoảng 500 triệu năm)


1

Nếu bạn sử dụng MySQL 5.6.4 hoặc mới hơn, bạn có thể sử dụng TIME(3), DATETIME(3)TIMESTAMP(3)các loại cột để lưu trữ lên đến 6 chữ số phân đoạn (thay thế 3với số chữ số phân đoạn bạn cần). Phần phân số được thêm vào chuỗi thời gian sau dấu chấm; ví dụ : 2018-09-08 17:51:04.781.

Tài liệu tham khảo chính thức

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.