我创建了一个表,不小心把varchar长度设置为300而不是65353。我该怎么解决呢?
请举例说明。
我创建了一个表,不小心把varchar长度设置为300而不是65353。我该怎么解决呢?
请举例说明。
当前回答
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
ALTER TABLE {table_name} MODIFY [COLUMN] {column_name} {column_type} {defaults and/or not-null};
(包括COLUMN是可选的)
注意:如果你的列是用NOT NULL等创建的,你可能需要在MODIFY语句中指定它们,以避免丢失它们。