<TABLE>에 대한 테이블 스토리지 엔진에는 쿼리 별 순서에이 옵션이 없습니다 (오류 1031).


80

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

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

질문:

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

반환 된 오류 :

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

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


두 데이터베이스 이름에 대해 별도의 역 따옴표를 사용 dbo하고 테이블 이름table_1
레빈 더 레디

성명은 다음과 같아야합니다select * from `dbo`.`table_1` order by textT
Ravinder Reddy 2015

문제 일 수 있음max_length_for_sort_data
Abhik Chakraborty 2015


2
세 가지 중요한 정보를 빠뜨 렸고 댓글 작성자 중 아무도 요청하지 않았습니다. -어떤 버전의 MySQL? 어떤 스토리지 엔진? 제공합니다 SHOW CREATE TABLE table_1.
Rick James

답변:


172

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

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

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

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

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

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


이것은 나를 위해 일했고 덤프 파일에서 가져 오기가 차단되었으며 이제 가져옵니다.
blackwood

멋진 퀵! 나 저장
팀 KRETSCHMER

2
@haagsma는 sed -e 대신 "-ie"에 대한 편집을 제안합니다. -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

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;

10

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

ALTER TABLE `dbo.table_1` ROW_FORMAT = DEFAULT ;

감사합니다. 이것은 나에게 완벽하게 작동했으며 외래 키로 가득 찬 innodb 여러 테이블을 다시 빌드해야하는 시간을 절약했습니다.
이안

2

이 문제는 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


1

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.