MySQL でテーブルを作成する際、以下のエラーが出た。
#1293 – Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
原因
登録日時・更新日時の timestamp型のカラムを2つ用意し、両方のデフォルト値に「current_timestamp」を設定したため
解決方法
登録日のデフォルト値を「0」に設定する(insert時に手動で入れる運用に)。
1.timestamp型のcurrent_timestampについて
timestamp型は、データの登録日時や更新日時を保存するため、テーブルにそれ用のカラムを作成することが多い(よね!?)。
「current_timestamp」は、その timestamp型に設定できる、デフォルト値の一つ。
しかし、「current_timestamp」を2つ設定し、create table すると上記のエラーが発生する。
テーブルに設定できる「current_timestamp」は、1つだけ。
timestamp型のカラムが2つあるテーブルを作成する際、デフォルト値を明示しなければ、最初の timestamp型のデフォルト値が「current_timestamp」となる。
それ以降の timestamp型のデフォルト値は「0」となる(「0000-00-00 00:00:00」が入る)。
すごい単純なことだけど、知らなかった・・・
2.作成日時と更新日時
今回、登録日時・更新日時のカラムを作成した。
(どうでもいいけどこの作成日時、登録日時や挿入日時、生成日時など色んな呼び方あるな・・・)
両方のカラムに自動で「current_timestamp」を挿入するのは無理そう。
片方はプログラムで対応しなければ。
今回は登録日のデフォルト値を「0」に設定する。
Insert 時に、プログラムのほうで現在時刻を取得する。
コメント