313

我创建了一个表并意外地将varchar长度设置为300而不是65353. 我该如何解决?

一个例子将不胜感激。

4

2 回答 2

594

你试过这个吗?

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

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

于 2009-08-14T19:01:46.710 回答
26
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),只要该列大小与表中其他列的总和不超过 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
于 2009-08-14T19:04:16.847 回答