Programing

에 대한 테이블 저장소 엔진에는 쿼리 별 순서에이 옵션이 없습니다 (오류 1031).

lottogame 2020. 10. 21. 07:38
반응형

에 대한 테이블 저장소 엔진에는 쿼리 별 순서에이 옵션이 없습니다 (오류 1031).

<TABLE> 용 테이블 스토리지 엔진에는이 옵션이 없습니다.

이것은 order by쿼리에서 MySQL이 반환하는 오류 입니다. 열 유형은 varchar(2000)입니다.

질문:

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

반환 된 오류 :

오류 1031 (HY000) : 'dbo.table_1'에 대한 테이블 스토리지 엔진에이 옵션이 없습니다.

왜 이런 일이 발생합니까? 어떻게 고칠 수 있습니까?


이 문제는 MyISAM으로 생성되었지만 나중에 InnoDB로 전환 된 테이블 정의를 가져올 때 발생하는 것으로 보입니다. 결과 ROW_FORMAT옵션이 유효하지 않은 것 같습니다.

내 보낸 데이터베이스를 가져 오려고 할 때이 문제가 발생하면 간단히 검색 ROW_FORMAT=FIXED하여 아무것도 바꾸면됩니다.

다음을 사용하여 매우 빠르게 수행했습니다.

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

문제 해결됨! 문제가 ROW_FORMAT이라는 점을 지적한 jbrahy에게 감사드립니다.

편집 : @seven의 제안에 따라 더 많은 플랫폼에서 작동하도록 업데이트되었습니다.


ROW_FORMAT = DYNAMIC이 포함 된 InnoDB 인 테이블 정의를 가져올 때 동일한 오류가 발생합니다. 테이블은 MyISAM 엔진으로 생성되었지만 나중에 InnoDB로 전환했습니다. create table 문에서 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`;

그런 다음 첫 번째 단계에서 create table 문을 실행합니다.

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

다음을 시도해 볼 수도 있습니다.

ALTER TABLE `dbo.table_1` ROW_FORMAT = DEFAULT ;

이 문제는 MySQL 5.6 및 이전 버전에서 생성 된 MySQL 5.7로 테이블 정의를 가져올 때 발생하는 것으로 보입니다. 옵션 KEY_BUFFER_SIZE = 8192 및 INNODB ENGINE에 대해 바이트 단위로 정의 된 유사한 크기에 의해 동일한 오류가 발생할 수 있습니다. sql-dump에서 base를 가져올 때이 오류가 발생했습니다. 결정 : sed -ie 's / KEY_BLOCK_SIZE = 16384 // g'my-file-sql_dump.sql


이 문제에 직면했고 백업 파일이 암호화 된 .zsql파일이었습니다. 그래서 innodb_strict_mode = off. 잘 작동했습니다.

참고 URL : https://stackoverflow.com/questions/29486583/table-storage-engine-for-table-doesnt-have-this-option-on-order-by-query-err

반응형