web-dev-qa-db-ja.com

MySQLテーブルのカラムのサイズを変更するにはどうすればいいですか?

テーブルを作成し、誤ってvarcharの長さを300ではなく65353にしました。どうすれば修正できますか?

一例をいただければ幸いです。

285
vehomzzz

これを試しましたか?

ALTER TABLE <table_name> MODIFY <col_name> VARCHAR(65353);

これはcol_nameの型をVARCHAR(65353)に変更します。

540
Mike Dinescu
ALTER TABLE <tablename> CHANGE COLUMN <colname> <colname> VARCHAR(65536);

列名を変更しない場合でも、列名を2回リストする必要があります。

この変更を加えると、列のデータ型はMEDIUMTEXTになります。


Miky Dは正しいです、MODIFYコマンドはこれをより簡潔にすることができます。


MEDIUMTEXTについて:MySQLの行は65535バイトしか使えません(BLOB/TEXTカラムを数えません)。列を大きすぎて行の合計サイズを65536以上に変更しようとすると、エラーが発生する可能性があります。 VARCHAR(65536)の列を宣言しようとすると、その列の唯一の列であっても大きすぎるため、MySQLは自動的にそれをMEDIUMTEXTデータ型に変換します。

mysql> create table foo (str varchar(300));
mysql> alter table foo modify str varchar(65536);
mysql> show create table foo;
CREATE TABLE `foo` (
  `str` mediumtext
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

私はあなたの元々の質問を誤解しました。テーブルの他のカラムと合計されたカラムサイズが65535を超えない限り、MySQLができるVARCHAR(65353)が欲しいです。

mysql> create table foo (str1 varchar(300), str2 varchar(300));
mysql> alter table foo modify str2 varchar(65353);
ERROR 1118 (42000): Row size too large. 
The maximum row size for the used table type, not counting BLOBs, is 65535. 
You have to change some columns to TEXT or BLOBs
23
Bill Karwin