<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的建议更新为更多平台工作
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)