เมื่อต้องการให้คอลัมน์วันที่/เวลา (DATETIME หรือ TIMESTAMP) มีค่าเริ่มต้นเป็นเวลาปัจจุบันของระบบ (System DateTime) ให้ใช้ CURRENT_TIMESTAMP เป็น Default Value
สร้างตาราง
mysql> create table DemoTable (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientFirstName varchar(20),
ClientLastName varchar(20),
ClientAge int
);
เพิ่มคอลัมน์ Timestamp พร้อม Default
mysql> alter table DemoTable add column ClientProjectDeadline timestamp default current_timestamp;
ตรวจสอบโครงสร้างตาราง
mysql> desc DemoTable;
+-----------------------+-------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------------+-------------+------+-----+-------------------+----------------+ | Id | int(11) | NO | PRI | NULL | auto_increment | | ClientFirstName | varchar(20) | YES | | NULL | | | ClientLastName | varchar(20) | YES | | NULL | | | ClientAge | int(11) | YES | | NULL | | | ClientProjectDeadline | timestamp | YES | | CURRENT_TIMESTAMP | | +-----------------------+-------------+------+-----+-------------------+----------------+
รายละเอียดสำคัญ
- TIMESTAMP - ชนิดข้อมูลที่เก็บ UTC แปลงตาม Timezone ของ Session
- DATETIME - เก็บค่า literal ไม่แปลง Timezone (MySQL 5.6.5+ รองรับ DEFAULT CURRENT_TIMESTAMP)
- CURRENT_TIMESTAMP - ฟังก์ชันคืนค่าเวลาปัจจุบันของเซิร์ฟเวอร์
ตัวเลือกเพิ่มเติม
-- อัปเดตอัตโนมัติเมื่อแก้ไขแถว ALTER TABLE DemoTable MODIFY ClientProjectDeadline TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; -- ใช้ DATETIME แทน (MySQL 5.6.5+) ALTER TABLE DemoTable ADD CreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP; -- กำหนด Timezone ให้ Session SET time_zone = '+07:00'; -- Thailand
คำเตือน
- TIMESTAMP ใช้ 4 bytes, DATETIME ใช้ 8 bytes (MySQL 5.6.4+)
- TIMESTAMP 範圍: '1970-01-01 00:00:01' UTC ถึง '2038-01-19 03:14:07' UTC (Year 2038 Problem)
- DATETIME 範圍: '1000-01-01' ถึง '9999-12-31' - เหมาะกว่าสำหรับข้อมูลอารยุกต์
- ตรวจสอบ
SHOW VARIABLES LIKE 'time_zone';ให้ถูกต้อง