テーブルで 3 つの日付を追跡する必要があります。
- created_at
- started_at
- finished_at
将来的には、スクリプトを任意のタイム ゾーンで動作させる予定です。私が知っているように、タイムスタンプを使用するときは、任意のタイムゾーンに変換できますが、datetime は変換できません。しかし一方で、1 つのテーブルに複数のタイムスタンプを含めることは最善の解決策ではないように思われ、通常はテーブルに datetime を使用します。
では、タイムゾーンを操作したい場合は、何を使用すればよいでしょうか? 実際には、3 つのタイムスタンプ列を持つテーブルを作成することさえできません (いくつかのエラーが発生します)。
アップデート:
4 つのタイムスタンプを持つテーブルを作成しようとすると、構文エラーが発生しました。コードは次のとおりです。
CREATE TABLE IF NOT EXISTS `vs2`.`campaigns` (
`starts_at` TIMESTAMP NOT NULL DEFAULT 0000-00-00 00:00:00 ,
`ends_at` TIMESTAMP NOT NULL DEFAULT 0000-00-00 00:00:00 ,
`updated_at` TIMESTAMP NOT NULL DEFAULT 0000-00-00 00:00:00 ,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
...
不要なフィールドを削除しました。datetime を使用するとうまく機能したため、その理由はタイムスタンプに問題があるためだと確信しています。私が覚えているように、すべてのタイムスタンプが現在の日付などに更新されるという問題があったため、デフォルト値を設定しました。created_at を除くすべてのタイムスタンプのデフォルト値を削除すると、次のようになりました。
Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause