Bạn cần ở MySQL phiên bản 5.6.4 trở lên để khai báo các cột có kiểu dữ liệu thời gian phân đoạn-giây. Không chắc bạn có phiên bản phù hợp? Thử SELECT NOW(3)
. Nếu bạn gặp lỗi, bạn không có phiên bản phù hợp.
Ví dụ:DATETIME(3)
sẽ cung cấp cho bạn độ phân giải mili giây trong dấu thời gian của bạn và TIMESTAMP(6)
sẽ cung cấp cho bạn độ phân giải micro giây trên dấu thời gian kiểu * nix.
Đọc phần này: https://dev.mysql.com/ doc / refman / 8.0 / en / fractional-seconds.html
NOW(3)
sẽ cung cấp cho bạn thời gian hiện tại từ hệ điều hành máy chủ MySQL của bạn với độ chính xác mili giây.
Nếu bạn có số mili giây kể từ Kỷ nguyên Unix , hãy thử điều này để nhận giá trị DATETIME (3)
FROM_UNIXTIME(ms * 0.001)
Dấu thời gian Javascript chẳng hạn, được biểu thị bằng mili giây kể từ Kỷ nguyên Unix .
(Lưu ý rằng số học phân số nội bộ MySQL, như * 0.001
, luôn được xử lý dưới dạng dấu phẩy động có độ chính xác kép IEEE754, vì vậy, không chắc bạn sẽ mất độ chính xác trước khi Mặt trời trở thành một ngôi sao lùn trắng.)
Nếu bạn đang sử dụng phiên bản MySQL cũ hơn và bạn cần độ chính xác của thời gian dưới giây, thì cách tốt nhất của bạn là nâng cấp. Bất cứ điều gì khác sẽ buộc bạn phải thực hiện những cách giải quyết lộn xộn.
Nếu vì lý do nào đó mà bạn không thể nâng cấp, bạn có thể xem xét sử dụng BIGINT
hoặc DOUBLE
để lưu trữ dấu thời gian Javascript như thể chúng là số. FROM_UNIXTIME(col * 0.001)
sẽ vẫn hoạt động tốt. Nếu bạn cần thời gian hiện tại để lưu trữ trong một cột như vậy, bạn có thể sử dụng UNIX_TIMESTAMP() * 1000