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

ตั้งค่า Default DateTime เป็น System Timestamp ใน MySQL

เมื่อต้องการให้คอลัมน์วันที่/เวลา (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'; ให้ถูกต้อง