Không thể mặc định ngày thành CURRENT_TIMESTAMP trong MySQL 5.5


18

Tôi không thể đặt Current_timestamplàm giá trị mặc định. MysqlPhiên bản của tôi là 5.5.47.

Truy vấn là

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

nhập mô tả hình ảnh ở đây

Trong khi nó hoạt động tốt trên DB cục bộ của tôi với mysql V5.6.56.


Vấn đề là do micro giây được thêm vào giá trị mặc định trong các phiên bản mới của mysql. Xem tekina.info/ Tìm kiếm giải pháp.
Aniket Singh

Câu trả lời:


25

Từ hướng dẫn sử dụng MySQL 5.5 :

Bạn không thể đặt mặc định cho cột ngày là giá trị của hàm như NOW () hoặc CURRENT_DATE. Ngoại lệ là bạn có thể chỉ định CURRENT_TIMESTAMP làm mặc định cho cột TIMESTAMP.

Do đó, những gì bạn muốn đạt được sẽ hoạt động trong MySQL 5.5 nếu bạn thêm một TIMESTAMPcột thay vì một DATEcột.

Các thay đổi trong 5.6.x cho phép chức năng được ghi lại ở đây và tôi sẽ trích dẫn tóm tắt có liên quan để hoàn thiện:

Kể từ phiên bản MySQL 5.6.5, các cột TIMESTAMP và DATETIME có thể được tự động khởi tạo và cập nhật theo ngày giờ hiện tại (nghĩa là dấu thời gian hiện tại). Trước 5.6.5, điều này chỉ đúng với TIMESTAMP và tối đa một cột TIMESTAMP trên mỗi bảng.


8

Kiểm tra câu trả lời này .

Lựa chọn của bạn là:

  • Nâng cấp lên MySQL 5.6.5
  • Thay đổi loại cột thành TIMESTAMP, như trong:

    ALTER TABLE `downloads` ADD `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
  • Tạo TRIGGER THAT tự động cập nhật cột:

    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 ;

    Bạn cũng có thể muốn tạo một giá trị cập nhật, nếu nó phải được tự động cập nhật khi cập nhật hoặc muốn ngăn các giá trị 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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.