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 /…を参照してください。
アニケシン

回答:


25

MySQLの5.5マニュアル

日付列のデフォルトをNOW()やCURRENT_DATEなどの関数の値に設定することはできません。例外は、TIMESTAMP列のデフォルトとしてCURRENT_TIMESTAMPを指定できることです。

したがって、TIMESTAMP列の代わりに列を追加すると、MySQL 5.5で達成したいことは機能しますDATE

機能を許可する5.6.xの変更点はここに記載されています。完全性のために関連する要約を引用します。

MySQL 5.6.5以降、TIMESTAMPおよびDATETIMEカラムは自動的に初期化され、現在の日時(つまり、現在のタイムスタンプ)に更新されます。5.6.5より前では、これはTIMESTAMP、およびテーブルごとに最大1つの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 ;

    更新時に更新値を自動的に更新する必要がある場合、またはヌル値を防止する場合は、更新値を作成することもできます。

    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.