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

Posted

技术标签:

【中文标题】如何修改 MySQL 表中列的大小?【英文标题】:How can I modify the size of column in a MySQL table? 【发布时间】:2010-11-19 18:10:05 【问题描述】:

我创建了一个表,不小心将varchar 长度设置为300 而不是65353。我该如何解决?

一个例子将不胜感激。

【问题讨论】:

【参考方案1】:

你试过了吗?

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

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

【讨论】:

这是否保持数据完整? @Flimm 似乎适合我。 @Flimm - 只是一个指针,如果你有一个 VARCHAR(100) 并将其更改为 VARCHAR(50) 它将从列中删除任何现有数据。不过,根据这个特定问题,使列变大不会对数据产生问题。 @WarrenSergent,在 5.7.15 中测试,如果有值受更改影响,它将抛出错误。默认情况下不会截断。您必须事先使用 SUBSTR 更新这些值。 @animo 是对的。看看这个以获得完整的答案***.com/a/9611293/1594933【参考方案2】:
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

【讨论】:

+1 你们有相同的答案。列的数据类型将是 MEDIUMTEXT 是什么意思?谢谢 @Bill:CHANGE 通常用于重命名列并更改其数据类型。 MODIFY 只会改变列的数据类型

以上是关于如何修改 MySQL 表中列的大小?的主要内容,如果未能解决你的问题,请参考以下文章

sql 中如何设置触发器使修改一个表中列的值时,同时修改另一个表的值

Mysql:过滤表依赖于不同表中列的子字符串

如何将一个表中列的每个不同值映射到 Hive 中另一个表中列的每个不同值

如何计算表中列的每个值?

如何复制临时表中列的默认约束?

如何检查我的表中列的任何值是不是包含 MS ACCESS 2003 中的尾随空格?