MySQL-删除列时发生行大小太大错误

MySQL-删除列时发生行大小太大错误,mysql,text,blob,innodb,Mysql,Text,Blob,Innodb,我有一张很宽的桌子。我需要在某个时候重构代码,但目前这不是一个选项。我需要去掉一个列,一个varcher(1024),并将一个列从varchar(1024)修改为TEXT,以改善表的大小 问题在于,表上的任何alter table命令(drop column或modify column)都会以以下错误结束: 行大小太大。所用表类型(不包括BLOB)的最大行大小为8126。这包括存储开销,请查看手册。您必须将某些列更改为文本或BLOB 我能做什么?我知道mysql建议我将一些列更改为文本vat,这

我有一张很宽的桌子。我需要在某个时候重构代码,但目前这不是一个选项。我需要去掉一个列,一个varcher(1024),并将一个列从varchar(1024)修改为TEXT,以改善表的大小

问题在于,表上的任何alter table命令(drop column或modify column)都会以以下错误结束: 行大小太大。所用表类型(不包括BLOB)的最大行大小为8126。这包括存储开销,请查看手册。您必须将某些列更改为文本或BLOB

我能做什么?我知道mysql建议我将一些列更改为文本vat,这样做最终会导致相同的错误

我已经准备好了 innodb_日志_文件_大小=2G innodb_日志_缓冲区_大小=2G innodb_文件_每_表 innodb_文件_格式=梭鱼
内部\u tmp\u磁盘\u存储\u引擎=MyISAM

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


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

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


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

,创建一个新表并复制数据怎么样?当然可以。我试试看。但我很惊讶这种情况正在发生。当我们将列更改为文本类型时,为什么mysql会出错。那么,如果桌子已经满了,那么你就死定了?它不能改变表以减轻负载,但它也不能再运行了。我想我可能错过了一些场景。我不知道,只能猜测。您想“更改”类型。但是在内部,MySQL可能需要创建一个具有新类型的新列,复制数据,然后删除旧列。在这种情况下,由于行大小限制,创建新列可能会失败。我已投票将此问题迁移到-我认为这是一个好问题,但您应该获得更好的帮助。创建一个新表并复制数据如何?当然,Paul,这可能行得通。我试试看。但我很惊讶这种情况正在发生。当我们将列更改为文本类型时,为什么mysql会出错。那么,如果桌子已经满了,那么你就死定了?它不能改变表以减轻负载,但它也不能再运行了。我想我可能错过了一些场景。我不知道,只能猜测。您想“更改”类型。但是在内部,MySQL可能需要创建一个具有新类型的新列,复制数据,然后删除旧列。在这种情况下,由于行大小限制,创建新列可能会失败。我已投票将此问题迁移到-我认为这是一个好问题,但您应该得到更好的帮助。