如何修改mysql表中列的大小?


Answers:


570

你有试过吗?

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

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


14
这样可以保持数据完整吗?
Flimm

1
@Flimm似乎对我来说。
deed02392 2013年

39
@Flimm-只是一个指针,如果您有VARCHAR(100)并将其更改为VARCHAR(50),它将从列中剪切所有现有数据。但是,根据这个特定问题,将列增大不会引起数据问题。
沃伦·瑟金特

8
@WarrenSergent(在5.7.15中进行了测试),如果有值受更改影响,它将引发错误。默认情况下不会截断。您必须事先使用SUBSTR更新值。
罗伯特·T。

1
@animo是正确的。查看完整的答案stackoverflow.com/a/9611293/1594933
gontard

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

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

请注意,进行此更改后,列的数据类型将为MEDIUMTEXT


Miky D是正确的,MODIFY命令可以更简洁地执行此操作。


回复的MEDIUMTEXT东西:一个MySQL行只能是65535字节(不计算BLOB / TEXT列)。如果尝试将列更改为太大,使行的总大小为65536或更大,则可能会出现错误。如果您尝试声明一列of,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

+1你们有相同的答案。列的数据类型将是MEDIUMTEXT是什么意思?thx
vehomzzz

3
@Bill:CHANGE通常用于重命名列并更改其数据类型。修改将仅更改列的数据类型
Mike Dinescu,2009年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.