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