<TABLE>的表存储引擎在按查询排序时没有此选项(ERROR 1031)

Uma*_*bal 75 mysql sql

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

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

查询:

select * from `dbo.table_1` order by textT;
Run Code Online (Sandbox Code Playgroud)

错误返回:

ERROR 1031(HY000):'dbo.table_1'的表存储引擎没有此选项.

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

jha*_*sma 155

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

如果您尝试导入导出的数据库并遇到此问题,则只需搜索并替换ROW_FORMAT=FIXED为空.

我使用以下内容非常快速地执行此操作:

sed -ie 's/ROW_FORMAT=FIXED//g' backup.sql
Run Code Online (Sandbox Code Playgroud)

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

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

  • @haagsma 建议对“-ie”进行编辑,而不仅仅是 sed -e。-ie 适用于 sed 的 GNU 和 BSD 版本。我是 os osx 并且 -i 的工作方式不同)```sed -ie 's/ROW_FORMAT=FIXED//g' backup.sql``` (2认同)
  • 如果@jbrahy指出了问题,他不应该被授予答案吗?看起来很奇怪他有4分,当他是正确的答案时你有32分. (2认同)

jbr*_*ahy 11

当我导入一个带有ROW_FORMAT = DYNAMIC的InnoDB的表定义时,我得到了同样的错误.该表是使用MyISAM引擎创建的,但后来我将其切换为InnoDB.当我从create table语句中删除ROW_FORMAT = DYNAMIC并重新创建表时,它工作正常.我对你的问题的解决方案就是这个.

show create table `dbo.table_1`;
Run Code Online (Sandbox Code Playgroud)

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

rename table `dbo.table_1` to `dbo.table_1_old`;
Run Code Online (Sandbox Code Playgroud)

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

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

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

insert into `dbo.table_1` select * from `dbo.table_1_old`;
Run Code Online (Sandbox Code Playgroud)

然后,您应该能够执行原始SQL

select * from `dbo.table_1` order by textT;
Run Code Online (Sandbox Code Playgroud)


小智 6

你也可以试试这个:

ALTER TABLE `dbo.table_1` ROW_FORMAT = DEFAULT ;
Run Code Online (Sandbox Code Playgroud)