Le moteur de stockage de table pour <TABLE> n'a pas cette option.
C'est l'erreur renvoyée par MySQL sur une requête order by
. Le type de colonne est varchar(2000)
.
Requete:
select * from `dbo.table_1` order by textT;
Erreur renvoyée:
ERREUR 1031 (HY000): le moteur de stockage de la table pour 'dbo.table_1' n'a pas cette option.
Pourquoi cela arrive-t-il? Et comment puis-je résoudre ce problème?
Ce problème semble se produire lorsque vous importez une définition de table créée avec MyISAM mais passée ultérieurement à InnoDB. les options ROW_FORMAT
résultantes semblent non valides.
Si vous essayez d'importer une base de données exportée et rencontrez ce problème, vous pouvez simplement rechercher et remplacer ROW_FORMAT=FIXED
Par rien.
J'ai utilisé ce qui suit pour le faire très rapidement:
sed -ie 's/ROW_FORMAT=FIXED//g' backup.sql
Problème résolu! Merci à jbrahy d’avoir fait remarquer que c’était le problème ROW_FORMAT.
EDIT: mis à jour pour fonctionner pour plus de plates-formes selon la suggestion de @ seven
La même erreur se produit lorsque j'importe une définition de table qui est InnoDB avec ROW_FORMAT = DYNAMIC. La table a été créée avec un moteur MyISAM, mais je l’ai ensuite basculée sur InnoDB. Lorsque j'ai supprimé ROW_FORMAT = DYNAMIC de l'instruction create table et que j'ai recréé la table, cela a bien fonctionné. Ma solution à votre problème serait la suivante.
show create table `dbo.table_1`;
puis prenez le résultat de cette commande et supprimez le ROW_FORMAT = DYNAMIC puis renommez la table en dbo.table_1_old
rename table `dbo.table_1` to `dbo.table_1_old`;
Exécutez ensuite l’instruction create table à partir de la première étape, c.-à-d.
-- don't use this create as there are missing columns use yours
create table `dbo.table_1` (textT VARCHAR(255));
Puis repeupler votre table avec les anciennes données.
insert into `dbo.table_1` select * from `dbo.table_1_old`;
Ensuite, vous devriez pouvoir exécuter votre code SQL original
select * from `dbo.table_1` order by textT;
Vous pouvez aussi essayer ceci:
ALTER TABLE `dbo.table_1` ROW_FORMAT = DEFAULT ;
Ce problème semble se produire lorsque vous importez une définition de table dans MySQL 5.7 créée avec MySQL 5.6 et versions antérieures. La même erreur peut produire par l’option KEY_BUFFER_SIZE = 8192 et des tailles similaires définies en octets pour INNODB ENGINE. J'ai eu cette erreur lorsque j'importe la base de sql-dump. Décision: sed -ie '/ KEY_BLOCK_SIZE = 16384 // g' mon-fichier-sql_dump.sql
Je faisais face à ce problème et mon fichier de sauvegarde était crypté .zsql
fichier. J'ai donc modifié my.cnf en ajoutant innodb_strict_mode = off
. Ça a bien fonctionné