用于<TABLE>的表存储引擎在查询时没有这个选项(错误1031)

用于<TABLE>的表存储引擎没有这个选项。

这是MySQL order by查询返回的错误。 列types是varchar(2000)

查询:

 select * from `dbo.table_1` order by textT; 

返回错误:

错误1031(HY000):'dbo.table_1'的表存储引擎没有这个选项。

为什么会这样呢? 我该如何解决?

当您导入使用MyISAM创build的表定义,但稍后切换到InnoDB时,会出现此问题; 生成的ROW_FORMAT选项似乎无效。

如果您尝试导入导出的数据库并遇到此问题,则可以简单地search并replaceROW_FORMAT=FIXED

我用下面的方法很快就做到了这一点:

 sed -ie 's/ROW_FORMAT=FIXED//g' backup.sql 

问题解决了! 由于jbrahy指出这是ROW_FORMAT这个问题。

编辑:根据@七的build议更新为更多的平台工作

当我导入一个InnoDB和ROW_FORMAT = DYNAMIC的表定义时,我得到了同样的错误。 该表是使用MyISAM引擎创build的,但后来我将它切换到InnoDB。 当我从create table语句中删除了ROW_FORMAT = DYNAMIC并重新创build表时,它工作正常。 我的解决scheme就是这个。

 show create table `dbo.table_1`; 

然后从该命令中取出输出并删除ROW_FORMAT = DYNAMIC,然后将该表重命名为dbo.table_1_old

 rename table `dbo.table_1` to `dbo.table_1_old`; 

然后从第一步即执行create table语句

 -- don't use this create as there are missing columns use yours create table `dbo.table_1` (textT VARCHAR(255)); 

然后用旧数据重新填充表格。

 insert into `dbo.table_1` select * from `dbo.table_1_old`; 

那么你应该能够执行你的原始SQL

 select * from `dbo.table_1` order by textT; 

你也可以试试这个:

 ALTER TABLE `dbo.table_1` ROW_FORMAT = DEFAULT ; 

当您将表定义导入到使用MySQL 5.6和更早版本创build的MySQL 5.7中时,会出现此问题。 同样的错误可以通过选项KEY_BUFFER_SIZE = 8192和INNODB ENGINE中以字节定义的相似尺寸产生。 我从sql-dump导入基地时出现此错误。 决定:sed -ie's / KEY_BLOCK_SIZE = 16384 // g'my-file-sql_dump.sql