source

키가 mariadb로 너무 깁니다만, 같은 인코딩의 스크립트가 mysql로 동작합니다.

nicesource 2022. 10. 15. 08:35
반응형

키가 mariadb로 너무 깁니다만, 같은 인코딩의 스크립트가 mysql로 동작합니다.

저는 질문과 관련 기사를 여러 번 읽었는데, 결국 문제를 해결했습니다(결국에는s/utf8mb4/utf8/gmy 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

마리아 기본값DB:

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

반응형