Механізм зберігання таблиць для <TABLE> не має цієї опції на замовлення за запитом (ПОМИЛКА 1031)


80

Механізм зберігання таблиць для <TABLE> не має цієї опції.

Це помилка, повернута MySQL за order byзапитом. Тип стовпчика varchar(2000).

Запит:

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

Помилка повернута:

ПОМИЛКА 1031 (HY000): Механізм зберігання таблиць для 'dbo.table_1' не має цієї опції.

Чому так трапляється? І як я можу це виправити?


використовувати окремі зворотні позначки як для імені бази даних, так і для назви dboтаблиціtable_1
Ravinder Reddy

заява повинна виглядати такselect * from `dbo`.`table_1` order by textT
Ravinder Reddy

Можливо, це випускmax_length_for_sort_data
Абхік Чакраборті


2
Ви залишили три важливі фрагменти інформації, і ніхто з коментаторів не запитував їх. - Яка версія MySQL? Який ДВИГУН Зберігання? Забезпечити SHOW CREATE TABLE table_1.
Рік Джеймс,

Відповіді:


172

Здається, ця проблема виникає, коли ви імпортуєте визначення таблиці, яке було створено за допомогою MyISAM, але згодом було переведено на InnoDB; отримані ROW_FORMATпараметри виявляються недійсними.

Якщо ви намагаєтеся імпортувати експортовану базу даних і зіткнулися з цією проблемою, ви можете просто здійснити пошук і заміну ROW_FORMAT=FIXEDнічим.

Я використав наступне, щоб зробити це дуже швидко:

sed -ie 's/ROW_FORMAT=FIXED//g' backup.sql

Проблема вирішена! Дякую jbrahy за те, що він вказав, що саме ROW_FORMAT був проблемою.

EDIT: оновлено для роботи на більшій кількості платформ згідно з пропозицією @ seven


Це спрацювало для мене, мені заблокували імпорт із дампа файлу, і тепер він імпортує.
blackwood

приємний швидкий! врятував мене
Тім Кречмер

2
@haagsma пропонує редагувати для "-ie" замість просто sed -e. -ie працює як на версіях sed GNU, так і на BSD. Я os osx і -i працює по-різному)sed -ie 's/ROW_FORMAT=FIXED//g' backup.sql
7

3
Якщо @jbrahy вказав на проблему, чи не слід йому відповісти? Здається дивним, що у нього 4 бали, а у вас 32, коли його правильна відповідь.
Johnny 3653925

1
Згідно з цим звітом про помилку , FIXEDмовчки змінюється на COMPACTMySQL 5.6 і раніше. Здається, це наводить на думку, що sed -ie 's/ROW_FORMAT=FIXED/ROW_FORMAT=COMPACT/g' backup.sqlбуло б "більш безпечним" рішенням з точки зору збереження однакової поведінки.
Steen Schütt

11

Я отримую ту ж помилку, коли імпортую визначення таблиці InnoDB із ROW_FORMAT = DYNAMIC. Таблиця була створена за допомогою движка 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`;

Потім виконайте оператор створення таблиці з першого кроку, тобто

-- 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;

10

Ви також можете спробувати це:

ALTER TABLE `dbo.table_1` ROW_FORMAT = DEFAULT ;

Дякую, це прекрасно спрацювало для мене і врятувало мене від перебудови innodb кількох таблиць, заповнених зовнішніми ключами.
Ян

2

Здається, ця проблема виникає, коли ви імпортуєте визначення таблиці до MySQL 5.7, створене за допомогою MySQL 5.6 і раніше. Ту саму помилку може спричинити b за допомогою опції KEY_BUFFER_SIZE = 8192 та подібних розмірів, визначених у байтах для INNODB ENGINE. У мене сталася ця помилка під час імпорту бази з sql-дампа. Рішення: sed -ie 's / KEY_BLOCK_SIZE = 16384 // g' my-file-sql_dump.sql


1

Я стикався з цією проблемою, і мій файл резервної копії був зашифрованим .zsql. Тож я змінив my.cnf, додавши innodb_strict_mode = off. Це спрацювало нормально

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.