ไม่สามารถกำหนดวันที่เป็น CURRENT_TIMESTAMP ใน MySQL 5.5 ได้


18

ฉันไม่สามารถตั้งCurrent_timestampเป็นค่าเริ่มต้นได้ ฉันรุ่นMysql5.5.47

ข้อความค้นหาคือ

ALTER TABLE `downloads` ADD `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;

ป้อนคำอธิบายรูปภาพที่นี่

mysql V5.6.56ในขณะที่มันทำงานได้ดีบนฐานข้อมูลท้องถิ่นของฉันด้วย


ปัญหาเกิดจาก microseconds เพิ่มในค่าเริ่มต้นในรุ่นใหม่ mysql ดูtekina.info/…สำหรับวิธีแก้ปัญหา
Aniket Singh

คำตอบ:


25

จากคู่มือMySQL 5.5 :

คุณไม่สามารถตั้งค่าเริ่มต้นสำหรับคอลัมน์วันที่ให้เป็นค่าของฟังก์ชันเช่น NOW () หรือ CURRENT_DATE ข้อยกเว้นคือคุณสามารถระบุ CURRENT_TIMESTAMP เป็นค่าเริ่มต้นสำหรับคอลัมน์ TIMESTAMP

ดังนั้นสิ่งที่คุณต้องการบรรลุจะทำงานใน MySQL 5.5 หากคุณเพิ่มTIMESTAMPคอลัมน์แทนDATEคอลัมน์

การเปลี่ยนแปลงใน 5.6.x ที่อนุญาตการทำงานมีการจัดทำเป็นเอกสารไว้ที่นี่และฉันจะอ้างอิงข้อสรุปที่เกี่ยวข้องเพื่อความครบถ้วน:

ในฐานะของ MySQL 5.6.5 คอลัมน์ TIMESTAMP และ DATETIME สามารถเริ่มต้นได้โดยอัตโนมัติและอัปเดตเป็นวันที่และเวลาปัจจุบัน (นั่นคือเวลาประทับปัจจุบัน) ก่อน 5.6.5 นี่เป็นความจริงเฉพาะกับ TIMESTAMP และอย่างน้อยหนึ่งคอลัมน์ TIMESTAMP ต่อตาราง


8

ตรวจสอบคำตอบนี้

ตัวเลือกของคุณคือ:

  • อัปเกรดเป็น MySQL 5.6.5
  • เปลี่ยนประเภทคอลัมน์เป็น TIMESTAMP เช่นเดียวกับใน:

    ALTER TABLE `downloads` ADD `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
  • สร้างทริกเกอร์ที่อัปเดตคอลัมน์โดยอัตโนมัติ:

    ALTER TABLE `downloads` ADD `date` DATETIME NULL; -- date must allow
                                                      -- NULLs or default
                                                      -- to a special value
    DROP TRIGGER IF EXISTS downloads_BI;
    DELIMITER //
    CREATE TRIGGER downloads_BI
    BEFORE INSERT ON downloads FOR EACH ROW
    BEGIN
        IF (NEW.date IS NULL) THEN -- change the isnull check for the default used
            SET NEW.date = now();
        END IF;
    END//
    DELIMITER ;

    คุณอาจต้องการสร้างค่าอัปเดตเช่นกันหากต้องอัปเดตโดยอัตโนมัติในการอัปเดตหรือต้องการป้องกันค่า Null

    mysql> INSERT INTO downloads (i) VALUES (1); -- I do not set date
    Query OK, 1 row affected (0.00 sec)
    
    mysql> SELECT * FROM downloads;
    +------+---------------------+
    | i    | date                |
    +------+---------------------+
    |    1 | 2016-03-22 09:27:52 |
    +------+---------------------+
    1 row in set (0.00 sec)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.