MuSQLでのDefault値設定削除について。

データベースを新環境のアプリケーションで動作させるため、「CURRENT_TIMESTAMP」のデフォルト値の解除を行いたく次のような試みを行ったのですが上手くいきません。解決方法がお分かりの方、教えてください。
mysql> show columns from xxxxxx;
| Field | Type | Null | Key | Default | Extra |
| created_at | timestamp | NO | | CURRENT_TIMESTAMP | |
26 rows in set (0.01 sec)

mysql> ALTER TABLE xxxxxx ALTER COLUMN created_at DROP DEFAULT;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

とやっても
mysql> show xxxxxx from ccontents;
| Field | Type | Null | Key | Default | Extra |
| created_at | timestamp | NO | | CURRENT_TIMESTAMP | |
26 rows in set (0.00 sec)

のように消えません

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2008/08/01 16:46:27
  • 終了:2008/08/01 18:43:58

ベストアンサー

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/08/01 17:12:08

ポイント40pt

NOT NULL かつ デフォルト値が設定されているカラムに対して、デフォルト値の削除はできません。デフォルト値の削除は、NULL 値の挿入を意味するからです。

それでもデフォルト値を削除したいようでしたら、NULL許可にしてください。


参考サイト

id:zfmx

ありがとうございます。

NULL許可に変更しようと以下の方法を試してみましたが、上手くいきませんでした。(いつもはこれでやっているのですが)

ALTER TABLE xxxxxx CHANGE COLUMN created_at created_at timestamp;

PostgreSQLには次のような方法があるようですが

ALTER TABLE xxxxxx ALTER COLUMN created_at DROP NOT NULL;

MySQLでこれに相当する方法はご存じないでしょうか?

2008/08/01 18:29:04

その他の回答(1件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/08/01 17:12:08ここでベストアンサー

ポイント40pt

NOT NULL かつ デフォルト値が設定されているカラムに対して、デフォルト値の削除はできません。デフォルト値の削除は、NULL 値の挿入を意味するからです。

それでもデフォルト値を削除したいようでしたら、NULL許可にしてください。


参考サイト

id:zfmx

ありがとうございます。

NULL許可に変更しようと以下の方法を試してみましたが、上手くいきませんでした。(いつもはこれでやっているのですが)

ALTER TABLE xxxxxx CHANGE COLUMN created_at created_at timestamp;

PostgreSQLには次のような方法があるようですが

ALTER TABLE xxxxxx ALTER COLUMN created_at DROP NOT NULL;

MySQLでこれに相当する方法はご存じないでしょうか?

2008/08/01 18:29:04
id:chuken_kenkou No.2

chuken_kenkou回答回数722ベストアンサー獲得回数542008/08/01 18:22:12

ポイント40pt

MySQLのTIMESTAMP型は、特殊です。

DEFAULT値を、どのように変更したいのでしょうか?

MySQLのTIMESTAMP型は、nullを設定したり、値を格納しないと、自動的にCURRENT_TIMESTAMPの値が入ります。

もしnullを格納したり、任意の日時を格納したいなら、DATETIME型を使う必要があります。


この場合、次のような指定になります。

列名変更を兼ねた機能であり、列名を変えない場合は、同じ列名を二つ指定する必要があります。

alter table t1
 change column created_at created_at datetime;

TIMESTAMP型のままなら、DEFAULT値を未指定(=CURRENT_TIMESTAMPを指定したのと同じ)、

あるいは'0000-00-00'などを指定する必要があります。

alter table t1
 change column created_at created_at timestamp default 0;


なお、マニュアルにはTIMESTAMP型の特殊性の説明がありましたが、「ALTER TABLEのDROP DEFAULTが無効」との直接的な記載は探した範囲では見当たりませんでした。

しかし、nullを指定したり、値を設定しないと、CURRENT_TIMESTAMPを設定した場合と同じである旨の説明はあります。また、TIMESTAMP型の扱いは、MySQL 4.1、5.1で仕様変更もあるようです。


MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.5.3 CREATE TABLE 構文

MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.2.2.2 DATETIME、DATE、TIMESTAMP 型

MySQL :: MySQL 5.0 Reference Manual :: 10.3.1 The DATETIME, DATE, and TIMESTAMP Types

id:zfmx

ありがとうございます。

ALTER TABLE ccontents MODIFY created_at timestamp NULL;

でNULLを設定して解決いたしました。

ありがとうございました。

2008/08/01 18:42:30

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません