<TABLE>的表存储引擎按查询顺序没有此选项(错误1031)


79

<TABLE>的表存储引擎没有此选项。

这是MySQL在order by查询中返回的错误。列类型为varchar(2000)

查询:

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

返回错误:

错误1031(HY000):“ dbo.table_1”的表存储引擎没有此选项。

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


为数据库名称dbo和表名称使用单独的反引号table_1
Ravinder Reddy

声明应类似于select * from `dbo`.`table_1` order by textT
Ravinder Reddy 2015年

可能是max_length_for_sort_data
Abhik Chakraborty 2015年


2
您已经遗漏了三个重要的信息,而且没有评论者要求他们。-什么版本的MySQL?哪个存储引擎?提供SHOW CREATE TABLE table_1
里克·詹姆斯

Answers:


171

当您导入使用MyISAM创建但后来切换到InnoDB的表定义时,似乎会出现此问题。结果ROW_FORMAT选项似乎无效。

如果您尝试导入导出的数据库并遇到此问题,则可以简单地搜索并替换ROW_FORMAT=FIXED为任何内容。

我使用以下方法来快速地做到这一点:

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

问题解决了!感谢jbrahy指出了问题所在是ROW_FORMAT。

编辑:根据@seven的建议更新为可用于更多平台


这对我有用,我被禁止从转储文件导入,现在可以导入了。
blackwood

好人啊!救了我
Tim Kretschmer

2
@haagsma建议编辑“ -ie”而不是sed -e。-ie在sed的GNU和BSD版本上均可使用。我的操作系统OSX和-i的工作方式不同)sed -ie 's/ROW_FORMAT=FIXED//g' backup.sql
7

3
如果@jbrahy指出了问题,是否应该给他答案?似乎很奇怪,他的正确答案是他得到4分,而您得到32分。
约翰尼3653925 '16

我认为导入备份时通常会引发此错误;并且因为这是在这种情况下解决问题的最快方法...我可以编辑我的答案以包含更多有关该问题的详细信息。
jhaagsma '16

11

导入具有ROW_FORMAT = DYNAMIC的InnoDB表定义时,出现相同的错误。该表是使用MyISAM引擎创建的,但后来我将其切换为InnoDB。当我从创建表语句中删除ROW_FORMAT = DYNAMIC并重新创建表时,它工作正常。我对您的问题的解决办法就是这样。

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;


2

当您将表定义导入使用MySQL 5.6和更早版本创建的MySQL 5.7时,似乎会出现此问题。选项KEY_BUFFER_SIZE = 8192可能产生相同的错误,并且为INNODB ENGINE定义了类似的字节大小。从sql-dump导入base时出现此错误。决定:sed -ie's / KEY_BLOCK_SIZE = 16384 // g'my-file-sql_dump.sql


1

我遇到了这个问题,我的备份文件是加密.zsql文件。所以我通过添加修改了my.cnf innodb_strict_mode = off。工作正常

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.