Larabel의 엔진 옵션 InnoDB로 인덱스 크기 제한을 피할 수 있는 이유는 무엇입니까?
Laravel에서 php 장인의 이행을 시도하면 다음과 같은 오류가 발생합니다.
1071 - 지정된 키가 너무 깁니다. 최대 키 길이는 767바이트입니다.
나는 이것을 해결책으로 사용할 수 있다.
단, MariaDB에서는 기본 데이터베이스 엔진이 InnoDB이므로 이 엔진 옵션을 설정할 필요가 없습니다.
MariaDB 10.2.2를 사용하는데 MySQL 5.7.7과 동등한 기능이 있어야 하기 때문입니다.
15.1 스토리지 엔진 설정
엔진 옵션을 생략하면 기본 스토리지 엔진이 사용됩니다. 기본 엔진은 MySQL 5.5.5(MyISAM 5.5 이전)의 InnoDB입니다.기본 엔진은 --default-storage-engine 서버 시작 옵션을 사용하거나 my.cnf 구성 파일에서 default-storage-engine 옵션을 설정하여 지정할 수 있습니다.
범용
InnoDB는 좋은 범용 트랜잭션 스토리지 엔진입니다.MySQL과 함께 MariaDB 10.2의 기본 스토리지 엔진입니다.이전 릴리스의 경우 XtraDB는 InnoDB의 성능 향상 포크이며 일반적으로 선호됩니다.
인덱스 길이 & MySQL / 마리아DB
Larabel은 기본적으로 utf8mb4 문자 집합을 사용합니다. 여기에는 데이터베이스에 "emojis" 저장 지원이 포함됩니다.5.7.7보다 오래된 버전의 MySQL 또는 10.2.2보다 오래된 버전의 MariaDB(My MariaDB는 10.2.2보다 새로운 버전)를 실행하고 있는 경우 MySQL에서 이러한 MySQL에 대한 인덱스를 작성하기 위해 마이그레이션에 의해 생성된 기본 문자열 길이를 수동으로 구성해야 할 수 있습니다.이를 설정하려면 AppServiceProvider 내에서 Schema::defaultStringLength 메서드를 호출합니다.
Larabel의 engine option 설정이 이면 데이터베이스 engine에 InnoDB가 사용되므로 인덱스 키 길이의 에러는 발생하지 않는다고 생각합니다.
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
Laravel 엔진에 InnoDB를 지정해야 하는 이유는 무엇입니까?
다음은 제가 사용하는 Laravel, PHP, MariaDB 버전입니다.
- Laravel v5.8.16
- mysql Ver 15.1 Distributed 10.2.10-MariaDB, Win64(AMD64)용
- PHP 7.3.5 (cli) (구축:2019년 5월 1일 13:17:17) (ZTS MSVC15 (Visual C++ 2017)x64 )
- 창문들
5가지 솔루션이 있습니다.
http://mysql.rjweb.org/doc.php/limits#767_limit_in_innodb_indexes
당신은 당신의 상황에 가장 잘 맞는 것을 고르세요.
첫 번째 항목에는 5.7.7의 제한이 더 크다고 나와 있습니다.InnoDB가 아니라 이 솔루션이 내장된 MySQL(또는 MariaDB) 버전입니다.InnoDB를 기본값으로 설정해도 이미 존재하는 테이블에는 영향을 주지 않습니다.
언급URL : https://stackoverflow.com/questions/56878640/why-can-i-avoid-index-size-limitations-with-laravels-engine-option-innodb
'itsource' 카테고리의 다른 글
SQL - INNODB vs MyISAM vs 아리아 (0) | 2022.10.05 |
---|---|
선택할 Maria DB 쿼리 및 테이블을 업데이트하여 원하지 않는 HTML 및 스크립트 태그를 제거합니다. (0) | 2022.10.05 |
두 마커 사이의 서브스트링을 추출하려면 어떻게 해야 합니까? (0) | 2022.10.05 |
SQL 계산에서의 에일리어스 사용 (0) | 2022.10.05 |
URL에서 파일 이름 가져오기 (0) | 2022.09.30 |