@jsnplankは、タイムスタンプの処理が異なることは正しいので、これら2つの特定の列に日時データ型を使用することを検討する必要がありますが、エラーメッセージの説明に失敗しています。
エラーメッセージは、デフォルト値が提供されていない場合にmysqlがタイムスタンプフィールドを処理する方法とSQLモード設定の組み合わせの結果である可能性があります。
-
特定のデフォルト値を設定せずに、両方のタイムスタンプ列をnullではないと定義します。これは、最初のタイムスタンプ列のデフォルト値がcurrent_timestamp()であり、レコードが変更されるたびにcurrent_timestamp()に更新されることを意味します。これが、2つのうちどちらが最初のものであるかに関係なく、最初のタイムスタンプフィールドがエラーメッセージを生成しない理由です。
ただし、デフォルト値を明示的に定義しない場合、2番目のnull以外のタイムスタンプ列のデフォルト値は「0000-00-0000:00:00」になります。
詳細については、このブログ投稿を参照してください。 。
-
おそらく
no_zero_date sqlモードは、サーバーで明示的に、または厳密なsqlモードの一部としても有効になっています。このSQLモードでは、デフォルト値として「0000-00-00 00:00:00」を設定する場合、またはこの値を任意の日付フィールドに挿入する場合にエラーが生成されます。
したがって、テーブルでタイムスタンプデータ型を使用できますが、2番目のデータ型をnull許容にするか、0または任意の有効な日付(エポックなど)を明示的なデフォルト値として指定します。
これらのフィールドで開始日と終了日をマークしているので、データ型としてタイムスタンプではなく日時を使用することをお勧めします。