Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL รองรับ Millisecond/Microsecond Precision แล้ว (DATETIME(6), TIMESTAMP(6))

MySQL ตั้งแต่ Version 5.6.4+ รองรับ Fractional Seconds Precision (fsp) สำหรับ TIME, DATETIME, TIMESTAMP ได้ถึง Microsecond (6 digits)

Syntax

TIME(fsp)
DATETIME(fsp)
TIMESTAMP(fsp)
-- fsp = 0 ถึง 6 (Default = 0 = ไม่มี Fractional Seconds)

ตัวอย่าง

-- ตรวจสอบ Version
SELECT VERSION();
-- 8.0.12 (รองรับ fsp)

-- ใช้ NOW(6) สำหรับ Microsecond
SELECT NOW(6);
-- 2018-11-11 17:13:25.485429

-- สร้างตาราง Microsecond Precision
CREATE TABLE milliseconds_demo (
    id INT PRIMARY KEY,
    created_at DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
    updated_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
    event_time TIME(6)
);

INSERT INTO milliseconds_demo (id, event_time) VALUES (1, '12:30:45.123456');

SELECT * FROM milliseconds_demo;
+----+----------------------------+----------------------------+--------------+
| id | created_at                 | updated_at                 | event_time   |
+----+----------------------------+----------------------------+--------------+
| 1  | 2024-01-15 10:30:45.123456 | 2024-01-15 10:30:45.123456 | 12:30:45.123456 |
+----+----------------------------+----------------------------+--------------+

FSP ใน Functions

NOW(fsp)           -- CURRENT_TIMESTAMP(fsp)
CURTIME(fsp)       -- CURRENT_TIME(fsp)
UTC_TIMESTAMP(fsp)
UTC_TIME(fsp)
SYSDATE(fsp)       -- ไม่ใช้ Replication Safe

Date Diff กับ Microseconds

-- DATEDIFF คืนค่า Day (Integer) ไม่รวม Time
SELECT DATEDIFF(NOW(6), NOW(6));  -- 0

-- TIMESTAMPDIFF รองรับ MICROSECOND
SELECT TIMESTAMPDIFF(MICROSECOND, '2024-01-01 10:00:00.000000', '2024-01-01 10:00:00.000001');
-- 1

-- UNIX_TIMESTAMP(6) คืนค่า Decimal
SELECT UNIX_TIMESTAMP(NOW(6));
-- 1705312245.123456

Storage Size

Typefsp=0fsp=1-2fsp=3-4fsp=5-6
TIME3 bytes4 bytes5 bytes6 bytes
DATETIME5 bytes6 bytes7 bytes8 bytes
TIMESTAMP4 bytes5 bytes6 bytes7 bytes

Best Practice

  • ✅ ใช้ DATETIME(6) หรือ TIMESTAMP(6) สำหรับ Audit Log, Financial Transaction
  • ✅ ใช้ TIMESTAMP(6) ถ้าต้องการ Timezone Conversion + Microsecond
  • ✅ ใช้ DATETIME(6) ถ้าต้องการเก็บเวลาแน่นอน (Birthday, Anniversary) + Microsecond
  • ⚠️ Index Size เพิ่มขึ้นตาม fsp (8 bytes vs 5 bytes สำหรับ DATETIME)
  • ⚠️ Application ต้องรองรับ Microsecond (Driver, ORM)