我创建了一个表,不小心把varchar长度设置为300而不是65353。我该怎么解决呢?

请举例说明。


当前回答

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

即使没有更改列名,也必须列出列名两次。

注意,在进行此更改之后,列的数据类型将为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)

我误解了你原来的问题,你想要VARCHAR(65353), MySQL可以做到,只要列大小与表中的其他列相加不超过65535。

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

其他回答

ALTER TABLE {table_name} MODIFY [COLUMN] {column_name} {column_type} {defaults and/or not-null};

(包括COLUMN是可选的)

注意:如果你的列是用NOT NULL等创建的,你可能需要在MODIFY语句中指定它们,以避免丢失它们。

你试过这个吗?

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

这将改变col_name的类型为VARCHAR(65353)

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

即使没有更改列名,也必须列出列名两次。

注意,在进行此更改之后,列的数据类型将为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)

我误解了你原来的问题,你想要VARCHAR(65353), MySQL可以做到,只要列大小与表中的其他列相加不超过65535。

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