<TABLE>的表存储引擎没有此选项。
这是MySQL在order by
查询中返回的错误。列类型为varchar(2000)
。
查询:
select * from `dbo.table_1` order by textT;
返回错误:
错误1031(HY000):“ dbo.table_1”的表存储引擎没有此选项。
为什么会这样?我该如何解决?
<TABLE>的表存储引擎没有此选项。
这是MySQL在order by
查询中返回的错误。列类型为varchar(2000)
。
查询:
select * from `dbo.table_1` order by textT;
返回错误:
错误1031(HY000):“ dbo.table_1”的表存储引擎没有此选项。
为什么会这样?我该如何解决?
select * from `dbo`.`table_1` order by textT
max_length_for_sort_data
SHOW CREATE TABLE table_1
。
Answers:
当您导入使用MyISAM创建但后来切换到InnoDB的表定义时,似乎会出现此问题。结果ROW_FORMAT
选项似乎无效。
如果您尝试导入导出的数据库并遇到此问题,则可以简单地搜索并替换ROW_FORMAT=FIXED
为任何内容。
我使用以下方法来快速地做到这一点:
sed -ie 's/ROW_FORMAT=FIXED//g' backup.sql
问题解决了!感谢jbrahy指出了问题所在是ROW_FORMAT。
编辑:根据@seven的建议更新为可用于更多平台
sed -ie 's/ROW_FORMAT=FIXED//g' backup.sql
导入具有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;
您也可以尝试以下操作:
ALTER TABLE `dbo.table_1` ROW_FORMAT = DEFAULT ;
dbo
和表名称使用单独的反引号table_1