【发布时间】:2017-08-12 03:49:28
【问题描述】:
我有一张很宽的桌子。我需要在某个时候重构代码,但目前这不是一个选项。我需要删除一列,一个 varcher(1024),并为表大小修改一列从 varchar(1024) 到 TEXT。
问题是对表的任何更改表命令,无论是删除列还是修改列,都会以以下错误结束: “行大小太大。所用表类型的最大行大小(不包括 BLOB)为 8126。这包括存储开销,请查看手册。您必须将某些列更改为 TEXT 或 BLOB”
我能做什么?我知道 mysql 建议我将某些列更改为 TEXT vat,这样做最终会出现相同的错误。
我已经设置好了 innodb_log_file_size=2G innodb_log_buffer_size=2G innodb_file_per_table innodb_file_format = 梭子鱼 internal_tmp_disk_storage_engine=MyISAM;
【问题讨论】:
-
创建一个新表并复制数据怎么样?
-
当然,保罗,它可能会奏效。我会试试看。但我很惊讶这种情况正在发生。当我们将列更改为 TEXT 类型时,为什么 mysql 会出错。因此,如果桌子已满员,那么您是否处于死胡同?它不能改变表来减轻负载,但它也不能再起作用了。我想我可能遗漏了一些设置。
-
我不知道,只能猜测。你想“改变”类型。但在内部,MySQL 可能需要使用新类型创建一个新列,复制数据,然后删除旧列。在这种情况下,由于行大小限制,创建新列可能会失败。
-
我已投票决定将此问题迁移到 dba.stackexchange.com - 我认为这是个好问题,但您应该在那里获得更好的帮助。