「dateAdded」の無効なデフォルト値


90

SQLで修正できない愚かな問題が発生しました。

ALTER TABLE `ニュース` 
 ADD `dateAdded` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AUTO_INCREMENT、
 主キーを追加( `dateAdded`)

エラー:

(#1067)Invalid default value for 'dateAdded'

誰かが私を助けてくれますか?


8
これはばかげた質問かもしれませんが、なぜあなたはなぜAUTO_INCREMENT DATETIMEですか?
jave.web

回答:


137

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

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

これを回避するには、テーブルに挿入後トリガーを設定して、新しいレコードの「現在」の値を入力します。


70
mysql 5.6.5以降では、DATETIMEフィールドでCURRENT_TIMESTAMPを使用できます。dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.htmlを
フランクシュヴィー

2
Frankに感謝します。最新のxamppから以前のxamppにエクスポートされたデータベースをインポートしようとしたときにこの問題を発見しました。
HCD、2014

HCD、フランク...がMariaDb 10.xからMariaDB 5.5にエクスポートする同じ問題を見つけました...ありがとう
Aukhan

1
このエラーは、mariadb 5.5でも発生します。mariadb 10にアップグレードして解決しました。ありがとうフランク
サミュエル・テスラー


16

また、MySQL 5.7.xでDATETIMEas DATETIME(3)またはlikeを指定する場合は、にも同じ値を追加する必要があることに注意してくださいCURRENT_TIMESTAMP(3)。そうでない場合は、「無効なデフォルト値」をスローし続けます


これにより、5.7.xで問題が解決しました。私の日時フィールドはdatetime(6)として定義され、CURRENT_TIMESTAMP(6)を使用して問題を解決しました
Brad

これは非常に注目に値することです。
Mateus Felipe

1

私は同じ問題を抱えていましたが、次の修正で問題が解決しました。

  • タイプとして「タイムスタンプ」を選択します

  • 長さ/値フィールドには何も入力しないでください。空白のままにする

  • デフォルト値としてCURRENT_TIMESTAMPを選択します。

MySQLバージョン5.5.56を使用しています



0

mysqlバージョン5.5は日時のデフォルト値をCURRENT_TIMESTAMPとして設定し、エラーを報告します。バージョン5.6に更新できます。日時のデフォルト値をCURRENT_TIMESTAMPとして設定します。


0

タイプを日時からタイムスタンプに変更してください。mysql 5.5.56-MariaDB-MariaDBサーバーで同じ問題が発生しました

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.