Laravel로 작업할 때 마이그레이션 중에 두려운 SQLSTATE[42000] 오류가 발생한다면 혼자가 아닙니다. 이 오류는 일반적으로 MySQL을 데이터베이스로 사용할 때 키 길이 문제로 인해 발생합니다. 이 블로그에서는 오류를 자세히 조사하고 명확한 단계별 해결 방법을 제공하겠습니다.
마이그레이션을 실행할 때 다음과 같은 오류가 표시될 수 있습니다.
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
예를 들어 다음 마이그레이션 명령은 실패합니다.
php artisan migrate
? 오류 내용
이는 Laravel이 사용자 테이블의 이메일과 같은 열에 고유 인덱스를 생성하려고 할 때 발생합니다. 255자의 기본 문자열 길이는 MySQL 구성에서 허용하는 최대 키 길이를 초과하며, 특히 utf8mb4 문자 세트(이모티콘 지원)를 사용하는 경우 더욱 그렇습니다.
이 문제를 해결하려면 마이그레이션 파일에서 테이블의 문자 집합과 데이터 정렬을 지정하면 됩니다. 방법은 다음과 같습니다.
1단계: 마이그레이션 파일 열기
문제를 일으키는 마이그레이션 파일을 찾으세요. 예:
데이터베이스/마이그레이션/0000_00_00_000000_create_users_table.php
2단계: 문자 집합 및 데이터 정렬 추가
charset 및 collation 속성을 포함하도록 마이그레이션 파일의 up() 메서드를 수정합니다.
Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->timestamps(); // Add charset and collation $table->charset = 'utf8'; $table->collation = 'utf8_unicode_ci'; });
⁉️ 이것이 효과적인 이유
문자 세트를 utf8로 설정하고 대조를 utf8_unicode_ci로 설정하면 문자당 최대 바이트 길이를 줄여 키 길이 문제를 피할 수 있습니다. 이 솔루션은 호환성을 위해 특정 멀티바이트 문자(예: 이모티콘)에 대한 지원을 절충합니다.
이 문제가 다른 마이그레이션에서 발생하지 않도록 하려면 AppServiceProvider에서 기본 문자열 길이를 정의할 수 있습니다.
1단계: AppServiceProvider 열기
app/Providers/AppServiceProvider.php로 이동합니다.
2단계: 부팅 방법 업데이트
부팅 방법에 다음 코드를 추가합니다:
use Illuminate\Support\Facades\Schema; public function boot() { Schema::defaultStringLength(191); // Shorten the default string length }
이 접근 방식은 전 세계적으로 모든 마이그레이션의 문자열 길이를 줄입니다.
마이그레이션 중 발생하는 SQLSTATE[42000] 오류는 걸림돌이 될 수 있지만, 이러한 수정 사항을 사용하면 문제를 빠르게 해결하고 Laravel 애플리케이션 구축을 계속할 수 있습니다. 특정 마이그레이션을 조정하거나 전역 기본 문자열 길이를 설정하도록 선택하면 이제 이 문제를 효과적으로 처리할 수 있는 도구가 제공됩니다.
Laravel 개발 중에 비슷한 오류가 발생했나요? 어떻게 해결하셨나요? 아래 댓글로 여러분의 경험을 공유해 주세요!
즐거운 코딩하세요! ?
위 내용은 Laravel 마이그레이션의 SQLSTATE[ 오류 해결: 키 길이 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!