Mysql5.7 デフォルト パラメータ error_MYSQL エラー 1067: NO_ZERO_IN_DATE、NO_ZERO_DATE のデフォルト値が無効です これら 2 つのパラメータ制限時間は 0 にすることはできません

mysql1067 デフォルト パラメータ error_MYSQL エラー 1067: 'xxx_time' ソリューションのデフォルト値が無効です

最近、mysql を 5.7 にアップグレードしたところ、データのエクスポート時に wordpress がエラーを報告しました。テーブルにフィールドを追加すると、突然、日付タイプのフィールドのデフォルト値が間違っているとレポートされることに気付きます。mysql8.0 でも同様の問題が発生する可能性があります。

あなたのフィールド名が何であるかを確認してください。私のものは時間フィールドで、タイプはdatetimeです。型のデフォルト値が制限されているのではないかと思い、sql_mode を確認してください。案の定: NO_ZERO_IN_DATE、NO_ZERO_DATE これら 2 つのパラメーター制限時間は 0 にすることはできません。

68741a1f9448d9c78d254db93388fee6.png

1.エラーのスクリーンショット

MySQL:エラー 1067 (42000): 'end_time' のデフォルト値が無効です

2. エラー分析

テーブルの最初の TIMESTAMP 列 (NULL として宣言されていないか、DEFAULT または ON UPDATE 句が指定されていない場合) には、DEFAULT CURRENT_TIMESTAMP および ON UPDATE CURRENT_TIMESTAMP 属性が自動的に割り当てられます。

最初の TIMESTAMP 列 (NULL または表示 DEFAULT 句として宣言されていない場合) は、自動的に DEFAULT '0000-00-00 00:00:00' (ゼロ タイムスタンプ) が割り当てられます。これは、sql_mode の NO_ZERO_DATE を満たさず、エラーを報告します。

注: sql_mode には 2 つのタイプがあり、1 つは null 値で、もう 1 つは厳密モードで、多くのデフォルト設定が提供されます。MySQL5.7 以降では、デフォルトで Strict モードが使用されます。

NO_ZERO_DATE: この値が設定されている場合、MySQL データベースはゼロの日付の挿入を許可せず、ゼロの日付を挿入すると、警告ではなくエラーがスローされます。

3. 解決策

方法 1: 最初に select @@sql_mode を実行し、クエリされた値をコピーしてその中の NO_ZERO_DATE を削除してから、set sql_mode = 'modified value' を実行します。

このメソッドは、現在のセッションでのみ有効です

方法 2: 最初に select @@global.sql_mode を実行し、クエリされた値をコピーしてその中の NO_ZERO_DATE を削除してから、set global sql_mode = 'modified value' を実行します。

このメソッドは現在のサービスで有効になり、MySQL サービスの再起動後に失敗します

方法 3: mysql インストール ディレクトリで、my.ini または my.cnf ファイルを開きます. wamp では、SQL_MODE は MySQL 5.7 では設定されていません。

1. my.ini ファイルで [mysqld] を見つけます

2. SQL_MODEがない場合は追加、ある場合は修正

sql_mode=”STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION”

また

sql_mode = ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION

3. MySQL を再起動します; service mysqld restart

おすすめ

転載: blog.csdn.net/happyzhlb/article/details/122766938