【问题标题】:MySQL - Row size too large error while dropping the columnMySQL - 删除列时行大小太大错误
【发布时间】: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 - 我认为这是个好问题,但您应该在那里获得更好的帮助。

标签: mysql text blob innodb


【解决方案1】:

切换到ROW_FORMAT=DYNAMIC。在这种模式下,宽列存储为指向行外区域的指针。在默认模式下,它们被存储为 767 字节加上一个指针,因此更有可能导致您收到错误。

如果你需要进一步讨论这个问题,我需要知道你运行的是哪个版本,加上SHOW CREATE TABLE,加上失败的ALTER

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 2021-07-16
    • 2019-05-17
    • 2012-10-28
    • 2019-09-05
    • 2014-12-31
    • 2018-01-22
    相关资源
    最近更新 更多