13

2 つのタイムスタンプ フィールドを持つテーブルがあります。名前とタイプTIMESTAMPで定義しただけですが、何らかの理由で、MySQL はそれらの 1 つにデフォルト値と属性を自動的に設定しますon update CURRENT_TIMESTAMP。どちらのフィールドにもデフォルト値を持たないように計画していましたが、フィールドの 1 つが「date_updated」と呼ばれているため、前述の属性をそのフィールドに設定できると思います。

残念ながら、属性で設定されたのは「date_created」フィールドでon update CURRENT_TIMESTAMPあり、何をしても MySQL はそれを削除できません。

「date_created」フィールドを編集して、属性を削除しようとしました。保存をクリックすると、属性が元に戻ります。また、両方のフィールドを選択して、一方から属性を削除し、もう一方に設定しようとしました。エラーが発生#1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clauseし、値の両方の属性列が突然on update CURRENT_TIMESTAMP結果に設定されます。

Error
SQL query:

ALTER TABLE  `pages` CHANGE  `date_created`  `date_created` TIMESTAMP NOT NULL ,
CHANGE  `date_updated`  `date_updated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL

MySQL said: 

#1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause 

これを修正するには、両方の列を正しい順序で再作成する必要がありますか?

今後の参考のために、この問題を正しく解決する方法を知りたいです。

ありがとう


今、私も実行しようとしました

ALTER TABLE pages
CHANGE date_created
 date_created TIMESTAMP NOT NULL
4

2 に答える 2

16

DEFAULT CURRENT_TIMESTAMP(またはDEFAULT 0)を指定する必要があります

ALTER TABLE pages CHANGE date_created date_created TIMESTAMP NOT NULL DEFAULT 0,
CHANGE  `date_updated`  `date_updated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL
于 2011-02-26T11:13:23.783 に答える
0

MySQL バージョン 5.6.6 では、構成ファイルでexplicit_defaults_for_timestampオプションを使用できるため、タイムスタンプ列にはデフォルトで 'DEFAULT CURRENT_TIMESTAMP' または 'ON UPDATE CURRENT_TIMESTAMP' 属性がありません。NOT NULL として宣言されていない場合は、これらの列を NULL に設定することも可能です。

参照: http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_explicit_defaults_for_timestamp

于 2014-07-16T08:43:41.473 に答える