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
| Type | fsp=0 | fsp=1-2 | fsp=3-4 | fsp=5-6 |
|---|---|---|---|---|
| TIME | 3 bytes | 4 bytes | 5 bytes | 6 bytes |
| DATETIME | 5 bytes | 6 bytes | 7 bytes | 8 bytes |
| TIMESTAMP | 4 bytes | 5 bytes | 6 bytes | 7 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)