El motor de almacenamiento de tablas para <TABLE> no tiene esta opción.
Este es el error devuelto por MySQL en una order by
consulta. El tipo de columna esvarchar(2000)
.
Consulta:
select * from `dbo.table_1` order by textT;
Error devuelto:
ERROR 1031 (HY000): el motor de almacenamiento de tablas para 'dbo.table_1' no tiene esta opción.
¿Por qué pasó esto? ¿Y cómo puedo solucionarlo?
dbo
y el nombre de la tablatable_1
select * from `dbo`.`table_1` order by textT
max_length_for_sort_data
SHOW CREATE TABLE table_1
.Respuestas:
Este problema parece ocurrir cuando está importando una definición de tabla que se creó con MyISAM pero luego se cambió a InnoDB; las
ROW_FORMAT
opciones resultantes parecen no ser válidas.Si está intentando importar una base de datos exportada y encuentra este problema, simplemente puede buscar y reemplazar
ROW_FORMAT=FIXED
con nada.Usé lo siguiente para hacerlo realmente rápido:
¡Problema resuelto! Gracias a jbrahy por señalar que el problema era ROW_FORMAT.
EDITAR: actualizado para funcionar para más plataformas según la sugerencia de @ seven
fuente
sed -ie 's/ROW_FORMAT=FIXED//g' backup.sql
FIXED
se cambia silenciosamente aCOMPACT
en MySQL 5.6 y antes. Eso parece sugerir quesed -ie 's/ROW_FORMAT=FIXED/ROW_FORMAT=COMPACT/g' backup.sql
sería una solución "más segura" en términos de mantener el mismo comportamiento.Recibo el mismo error cuando importo una definición de tabla que es InnoDB con ROW_FORMAT = DYNAMIC en ella. La tabla se creó con un motor MyISAM pero luego la cambié a InnoDB. Cuando eliminé ROW_FORMAT = DYNAMIC de la declaración de creación de tabla y recreé la tabla, funcionó bien. Mi solución a tu problema sería esta.
show create table `dbo.table_1`;
luego tome la salida de ese comando y elimine ROW_FORMAT = DYNAMIC luego cambie el nombre de la tabla a
dbo.table_1_old
rename table `dbo.table_1` to `dbo.table_1_old`;
Luego ejecute la declaración de creación de tabla desde el primer paso, es decir
-- don't use this create as there are missing columns use yours create table `dbo.table_1` (textT VARCHAR(255));
Luego, vuelva a llenar su tabla con los datos antiguos.
insert into `dbo.table_1` select * from `dbo.table_1_old`;
Entonces deberías poder ejecutar tu SQL original
select * from `dbo.table_1` order by textT;
fuente
También puedes probar esto:
ALTER TABLE `dbo.table_1` ROW_FORMAT = DEFAULT ;
fuente
Este problema parece ocurrir cuando está importando una definición de tabla a MySQL 5.7 que se creó con MySQL 5.6 y versiones anteriores. El mismo error puede producirb por la opción KEY_BUFFER_SIZE = 8192 y tamaños similares definidos en bytes para INNODB ENGINE. Tuve este error cuando estoy importando la base desde sql-dump. Decisión: sed -ie 's / KEY_BLOCK_SIZE = 16384 // g' my-file-sql_dump.sql
fuente
Estaba enfrentando este problema y mi archivo de respaldo era un
.zsql
archivo encriptado . Así que modifiqué my.cnf agregandoinnodb_strict_mode = off
. Funcionó bienfuente