Подтвердить что ты не робот

Механизм хранения таблиц для <TABLE> не имеет этой опции по заказу по запросу (ERROR 1031)

Механизм хранения таблиц для <TABLE> не имеет этой опции.

Это ошибка, возвращаемая MySQL в запросе order by. Тип столбца varchar(2000).

Query:

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

Ошибка:

ОШИБКА 1031 (HY000): У механизма хранения таблиц для 'dbo.table_1' этого параметра нет.

Почему это происходит? И как я могу это исправить?

4b9b3361

Ответ 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