• 締切済み

ALTER文を使用してプライマリキーのlengthを変更

はじめまして. 1点、ご質問がございます。 mysqlにてテーブルを既に構築しています。 テーブルのプPROMARY KEYの型がVARCHARの255バイトで定義 しています。 その長さを変更したく思いますが、DROP文は使わず、 ALTER文で更新するような方法で、できないものかと模索中です。 ご存知の方がいらっしゃいましたら、お知恵をお貸し願えないでしょうか? よろしくお願いします。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

MySQLのバージョンはいくつでしょう? 私の知る限りvarcharの上限は255文字なのですが 最新のバージョンでは1024文字までいけるのですか?

534fesgh4509h0
質問者

お礼

バージョンは5.0.19です.

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

例えば`テーブル`の`プライマリフィールド`のVARCHARを100に変えるなら 以下のようなかんじ。 ALTER TABLE `テーブル` CHANGE `プライマリフィールド` `プライマリフィールド` VARCHAR( 100 ) NOT NULL ただし短くすることにより同一のキーができてしまうのであれば つかえません。そういう場合は一度プライマリをはずして、 同じものになる場合の処理をしたのち、再度プライマリ設定を してみてください

534fesgh4509h0
質問者

補足

質問したものですが、説明に不足点がありましたので、 上記の変更を行う理由を詳細の述べたいと思います。 テーブルのキャラクターコードがUTF-8での場合、 ALTER TABLE テーブル名 MODIFY rss_link VARCHAR(1024)と した場合、 #1071 Specified key was too long; max key length is 999 bytes のエラーが発生します。 PROMARY KEY の lengthが超えてしまっている為、lengthの値を 更新したく思い、 DROP後、再度、PROMARY KEY作成時にlength値を設定する事で 対応はできますが、作り直すのではなく、更新処理で対応しようかと 模索している最中なのです。 ちなみにALTER TABLE `テーブル` CHANGE `プライマリフィールド` `プライマリフィールド` VARCHAR( 100 ) NOT NULL も試してみましたが #1071 のエラーが発生しました。 ※ 100 では なく 1024 で試しました。

関連するQ&A