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 số-giây. Không chắc bạn có phiên bản phù hợp? Cố gắng 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)
Ví dụ: dấu thời gian Javascript đượ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ộ của MySQL, giống như * 0.001
, luôn được xử lý dưới dạng dấu chấm động 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 các 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ể cân nhắc sử dụng BIGINT
hoặc DOUBLE
các cột để 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 OK. 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ụngUNIX_TIMESTAMP() * 1000