【发布时间】:2010-11-19 18:10:05
【问题描述】:
我创建了一个表,不小心将varchar 长度设置为300 而不是65353。我该如何解决?
一个例子将不胜感激。
【问题讨论】:
标签: mysql database alter-table
我创建了一个表,不小心将varchar 长度设置为300 而不是65353。我该如何解决?
一个例子将不胜感激。
【问题讨论】:
标签: mysql database alter-table
你试过了吗?
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
【讨论】: