mysqlテーブルの列のサイズを変更するにはどうすればよいですか?


301

テーブルを作成しましたがvarchar、の300代わりに誤って長さを入力しました65353。どうすれば修正できますか?

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

回答:


571

これを試しましたか?

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

これにより、col_nameのタイプが次のように変更されますVARCHAR(65353)


14
これはデータをそのまま保持しますか?
Flimm 2013

1
@Flimmは私には思えます。
deed02392 2013

39
@Flimm-ポインタのみ。VARCHAR(100)があり、それをVARCHAR(50)に変更すると、既存のデータが列から削除されます。ただし、この特定の質問によると、列を大きくしてもデータに問題はありません。
ウォーレンサージェント2014年

8
@WarrenSergentは5.7.15でテストされており、変更の影響を受ける値がある場合はエラーがスローされます。デフォルトでは切り捨てられません。事前にSUBSTRで値を更新する必要があります。
Robert T.

1
@animoは正しいです。完全な答えのためにこれを見てstackoverflow.com/a/9611293/1594933
gontard

26
ALTER TABLE <tablename> CHANGE COLUMN <colname> <colname> VARCHAR(65536);

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

この変更を行った後、列のデータ型はになることに注意してくださいMEDIUMTEXT


Miky Dは正解MODIFYです。コマンドはこれをより簡潔に行うことができます。


MEDIUMTEXT物:MySQLの行は、65535バイト(BLOB /テキスト列をカウントしない)とすることができます。列を大きくして行の合計サイズを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)

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

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

+1あなたはみんな同じ答えを持っています。列のデータ型がMEDIUMTEXTになるのはどういう意味ですか?thx
vehomzzz 2009

3
@Bill:CHANGEは通常、列の名前を変更してデータ型を変更するために使用されます。MODIFYは列のデータ型のみを変更します
Mike Dinescu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.