Механизм хранения таблиц для <TABLE> не имеет этой опции по заказу по запросу (ERROR 1031)
Механизм хранения таблиц для <TABLE> не имеет этой опции.
Это ошибка, возвращаемая MySQL в запросе order by
. Тип столбца varchar(2000)
.
Query:
select * from `dbo.table_1` order by textT;
Ошибка:
ОШИБКА 1031 (HY000): У механизма хранения таблиц для 'dbo.table_1' этого параметра нет.
Почему это происходит? И как я могу это исправить?
Ответы
Ответ 1
Эта проблема возникает, когда вы импортируете определение таблицы, которое было создано с помощью MyISAM, но позже было переключено на InnoDB; результирующие параметры ROW_FORMAT
выглядят неверными.
Если вы пытаетесь импортировать экспортированную базу данных и сталкиваетесь с этой проблемой, вы можете просто найти и заменить ROW_FORMAT=FIXED
ничем.
Я использовал следующее, чтобы сделать это очень быстро:
sed -ie 's/ROW_FORMAT=FIXED//g' backup.sql
Проблема решена! Благодаря jbrahy для указания на то, что проблема была ROW_FORMAT.
EDIT: Обновлено для работы для большего количества платформ в соответствии с предложением @seven
Ответ 2
Я получаю ту же ошибку, когда я импортирую определение таблицы, которое InnoDB с ROW_FORMAT = DYNAMIC в нем. Таблица была создана с помощью механизма MyISAM, но позже я переключил его на InnoDB. Когда я удалил ROW_FORMAT = DYNAMIC из инструкции create table и воссоздал таблицу, он работал нормально. Моим решением вашей проблемы было бы это.
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 с первого шага i.e.
-- 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;
Ответ 3
Вы также можете попробовать следующее:
ALTER TABLE `dbo.table_1` ROW_FORMAT = DEFAULT ;
Ответ 4
Эта проблема возникает, когда вы импортируете определение таблицы в MySQL 5.7, которое было создано с MySQL 5.6 и ранее. Такая же ошибка может произвести b по опции KEY_BUFFER_SIZE = 8192 и аналогичным размерам, определенным в байтах для INNODB ENGINE.
У меня была эта ошибка, когда я импортирую базу из sql-dump.
Решение: sed -ie '/KEY_BLOCK_SIZE = 16384//g' my-file-sql_dump.sql