키가 mariadb로 너무 깁니다만, 같은 인코딩의 스크립트가 mysql로 동작합니다.
저는 이 질문과 관련 기사를 여러 번 읽었는데, 결국 문제를 해결했습니다(결국에는s/utf8mb4/utf8/g
my sql script)에서는 왜 이것이 그대로 MySQL에서 기능하는지 아직 모르겠습니다만, MariaDB에서 검색을 대체해야 했습니다.
셋업:
- 머신 1: Mysql 5.7.19
- 머신 2: MariaDb 10.1.25
두 기계 모두 다음과 같은 데이터베이스를 만들었습니다.
CREATE DATABASE `test` COLLATE 'utf8mb4_general_ci'
입력 스크립트는 약 300개의 테이블이 포함된 16MB SQL 파일이며 모두 다음과 같이 선언됩니다.ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED
이 파일을 MariaDb로 Import하려고 하면 다음과 같은 메시지가 나타납니다.
ERROR 1071 (42000) at line 602: Specified key was too long; max key length is 767 bytes
그러나 MySQL에서 동일한 파일 변경 내용을 Import하면 모든 테이블이 정상적으로 생성됩니다.
MariaDB 머신에서도 같은 작업을 하기 위해서는 앞서 언급한 작업을 수행해야 합니다.s/utf8mb4/utf8/g
를 참조해 주세요.
질문의 요지는 MySQL과 동일한 형식으로 파일을 Import할 수 있도록 MariaDB를 셋업할 수 있는 방법이 있는가?
@Cbroe에 의한 중복에 대해서는, 다음의 몇개의 방법으로 실패합니다.
1 - MyIsam과 InnoDB의 인덱스 사이즈의 차이를 설명하고 있습니다(또한 두 경우 모두 InnoDB를 사용하고 있는데 MySQL에서 동작하는 동안 MariaDB에서 실패합니다).
2 - 가능하다면 MariaDB를 MySQL로 동작시키는 방법은 설명되지 않습니다.이 스크립트는 이 엔진에서 동작할 수 있고, 이 인코딩은 MySQL에서 동작할 수 있기 때문에 MariaDB에서도 같은 동작을 할 수 있습니까?만약 아니라면, 왜?
게다가, 우리는 이미 주장되고 있는 복제품과는 다른 유효한 답변을 가지고 있다.
큰 키의 지원을 이노블로 만들려면 시스템 변수를 이노블로 해야 합니다.
이 옵션을 활성화하면 DYNAMIC 또는 COMPRESSED 행 형식을 사용하는 InnoDB 테이블에서 767바이트(최대 3072바이트)보다 긴 인덱스 키 접두사가 허용됩니다.다양한 설정에서 인덱스 키 프리픽스와 관련된 최대값은 섹션 14.8.1.7 "InnoDB 테이블 제한"을 참조하십시오.
이 점을 염두에 두고:
Mysql 기본값:
Permitted Values (<= 5.7.6) Type boolean Default OFF Permitted Values (>= 5.7.7) Type boolean Default ON
Data Type: boolean Default Value: ON (>= MariaDB 10.2.2) OFF (<= MariaDB 10.2.1)
따라서 MariaDB 설정에서 이 값을 설정합니다(올바른 row_format, innodb_file_format을 사용하여 innodb_file_per_table을 활성화해야 합니다).
「767」문제에는, 다음의 5개의 회피책이 있습니다.
⚈ Upgrade to 5.7.7 (MariaDB 10.2.x) for 3072 byte limit -- your host provider may not provide this;
⚈ Change 255 to 191 on the VARCHAR -- you lose any keys longer than 191 characters (unlikely?);
⚈ ALTER .. CONVERT TO utf8 -- you lose Emoji and some of Chinese;
⚈ Use a "prefix" index -- you lose some of the performance benefits;
⚈ Reconfigure (if staying with 5.6.3 (10.1.x) - 5.7.6) -- 4 things to change: Barracuda + innodb_file_per_table + innodb_large_prefix + dynamic or compressed.
@Solarflare 답변을 보완하려면:
「」를 유효하게 하는 것 에,innodb_large_prefix
, 로 설정할 필요가 있었습니다.BARRACUDA
.
이 문서에서는 MariaDB가 InnoDB에 사용하는 형식과 버전 및 호환성에 대해 자세히 설명합니다.
언급URL : https://stackoverflow.com/questions/45822688/key-was-too-long-in-mariadb-but-same-script-with-same-encoding-works-on-mysql
'source' 카테고리의 다른 글
String으로의 캐스팅과 String.valueOf의 차이 (0) | 2022.10.15 |
---|---|
동적으로 확장되는 어레이 (0) | 2022.10.15 |
mysql 워크벤치 EER 열기 오류 (0) | 2022.10.15 |
Larabel에서 이 작업을 수행하는 방법, 서브쿼리: (0) | 2022.10.15 |
Javascript - 내부가 없는 컨테이너 요소에 HTML 추가HTML (0) | 2022.10.15 |