用于<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