2016-08-31 1 views
2

私はSequel Proアプリを使用してdbを操作しています。'created'のデフォルト値が無効ですが、DATETIMEにCURRENT_TIMESTAMPを使用しています

Mysql 5.7を使用しています。

私は以下のテーブル構造を持っています。私は「を作成」テーブルの列の順序を変更しようとすると、I 『を作成』のmysqlの「無効なデフォルト値からエラーを取得します。

再注文をしようとしたとき、私はmaterialsテーブルに行がありません。

すべてから私はCURRENT_TIMESTAMPが正しいデフォルト値であり、読んだ。

CREATE TABLE `materials` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `modified` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; 

私の目標は、行が追加されたときcreated列が自動的に満たされることです。変更されたときmodifiedが自動的に現在の時刻に更新します。

私には何が欠けていますか?

+0

ここにあなたの質問に関連する投稿があります。 [http://stackoverflow.com/questions/4897002/mysql-current-timestamp-on-create-and-on-update](http://stackoverflow.com/questions/4897002/mysql-current-timestamp-on-作成中) – Srini

+0

@Sriniあなたがリンクした投稿は私の問題には答えません。実際、今年2月のようなコメントでは、それは有効であるはずです。 http://stackoverflow.com/a/35426865/68788 – Geuis

答えて

2

CURRENT_TIMESTAMPは、TIMESTAMPフィールドでのみ使用できます。 DATETIMEフィールドはヌルデフォルト値のままにするか、またはデフォルト値を持たないようにする必要があります。デフォルト値は、式の結果ではなく定数値でなければなりません。

関連ドキュメント:http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html

あなたはどんな新しいレコードの「今」の値を埋めるために、テーブルの上に挿入後のトリガーを設定することにより、この問題を回避することができます。

参考:Invalid default value for 'dateAdded'

関連する問題