에 대한 테이블 저장소 엔진에는 쿼리 별 순서에이 옵션이 없습니다 (오류 1031).
<TABLE> 용 테이블 스토리지 엔진에는이 옵션이 없습니다.
<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
. 잘 작동했습니다.
'Programing' 카테고리의 다른 글
파이썬에서 소금과 해시 암호 (0) | 2020.10.21 |
---|---|
AddWithValue 매개 변수가 NULL 인 경우 예외 (0) | 2020.10.21 |
GridView-빈 데이터 소스에 헤더 표시 (0) | 2020.10.21 |
문자열에서 일치하는 수를 계산하는 Perl 단축키가 있습니까? (0) | 2020.10.21 |
Ruby에서 밀리 초 단위로 작업 시간을 측정하는 방법은 무엇입니까? (0) | 2020.10.21 |