我创建了一张表格,意外地将
varchar
的长度设为300
而不是65353
。我该如何修复它?请给出一个例子。varchar
的长度设为300
而不是65353
。我该如何修复它?请给出一个例子。你尝试过这个吗?
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
语句中指定它们,以避免丢失。