2016-08-09 8 views
2

私のmysqlテーブルにleave_dateという名前の列があります。mysql DATEデータ型のデフォルト値が動作しない

これは私が作成する方法です。

leave_date DATE NOT NULL DEFAULT '0000-00-00' 

それは私の以前のMySQLバージョンではOKだったが、今は5.7を持っていると私はテーブルの上に作成しようとすると、私はエラーを取得することができます。

メッセージは次のようになります。

ERROR 1067(42000): 'leave_date'

の無効なデフォルト値誰が問題であるものを教えてもらえますか?

ありがとうございます。ここ

+0

あなたはデフォルト値を設定する必要はありませんでしたが、自動的に '0000-00-00'を入力するだけです。 –

答えて

2

問題は、有効な日付を使用していないことです。

MySQLの最小有効日は'1000-01-01'です。通常、各RDBMSには独自の最小日付値があります。 Oracleは0001-01-01、SQLサーバーは01/01/1753です。

編集:エラーが表示されているので、この列に時間の値があると思いますか?それをdatetimeに変更してみてください

テーブルを更新して時間値を自分で切り捨て、alterコマンドを使用してください。

+0

私はそれを試しましたが、その後、mysql> ALTER TABLEの従業員は変更可能ですleave_date DATE NOT NULL DEFAULT '1000-10-01'; エラー1265(01000):行1の 'leave_date'列のデータが切り捨てられました。 ' – user3733831

+0

@ user3733831答えを編集しました。 – sagi

+0

その列には値はありません。とにかく 'datetime'を試しましたが、上記のエラーメッセージと同じエラーメッセージが表示される – user3733831

2

公式siteからの文書である。(Mysqlの5.7)

DATEタイプは、日付部分が、時間がない部分と値のために使用されます。 MySQLはDATE値を取得して 'YYYY-MM-DD'形式で表示します。サポートされている範囲は '1000-01-01'〜 '9999-12-31'です。

0000-00-00は、1000-01-01から9999-12-31にありません。

+0

私は '1000-01-01'の日付で試しました。しかし、それは私のためには機能しません。 – user3733831

+0

@ user3733831このデフォルト値には特別な意味がありますか?そうでない場合は、現在の日付を使用しないでください。 – Blank

1

これは、サーバーのSQLモード - NO_ZERO_DATEが原因です。参照から

NO_ZERO_DATE - strictモードでは、有効な日付として '0000-00-00' を許可していません。 IGNOREオプションを使用してゼロの日付を挿入することはできます。 strictモードでない場合、日付は受け入れられますが、警告が生成されます。

+0

興味深い。私はこの旗について知らなかった –

関連する問題