MySQL 5.5에서 CURRENT_TIMESTAMP로 날짜를 지정할 수 없음


18

Current_timestamp기본값 으로 설정할 수 없습니다 . 내 Mysql버전은 5.5.47입니다.

검색어

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

여기에 이미지 설명을 입력하십시오

로 로컬 DB에서 제대로 작동하는 동안 mysql V5.6.56.


문제는 mysql 새 버전에서 기본값으로 추가 된 마이크로 초 때문입니다. 해결책 은 tekina.info/… 를 참조하십시오 .
Aniket Singh

답변:


25

로부터 MySQL을 5.5 수동 :

날짜 열의 기본값을 NOW () 또는 CURRENT_DATE와 같은 함수의 값으로 설정할 수 없습니다. 단, CURRENT_TIMESTAMP를 TIMESTAMP 열의 기본값으로 지정할 수 있습니다.

따라서 TIMESTAMP열 대신 열 을 추가하면 달성하려는 것이 MySQL 5.5에서 작동 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.