人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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)

のように消えません


●質問者: zfmx
●カテゴリ:コンピュータ
✍キーワード:00 ALTER FIELD Key MySQL
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pahoo
●40ポイント ベストアンサー

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

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


参考サイト

◎質問者からの返答

ありがとうございます。

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

ALTER TABLE xxxxxx CHANGE COLUMN created_at created_at timestamp;

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

ALTER TABLE xxxxxx ALTER COLUMN created_at DROP NOT NULL;

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


2 ● chuken_kenkou
●40ポイント

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

◎質問者からの返答

ありがとうございます。

ALTER TABLE ccontents MODIFY created_at timestamp NULL;

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ