2012-05-17 5 views
1

mysql 5.0.91을 사용하고 있으며 URL을 저장해야합니다 (일부는 작고 일부는 매우 길어집니다). 나는 varchar(2000)을 사용하고 싶지만 나는 오류 얻을 :오류 : # 1071 - 지정된 키가 너무 깁니다. 최대 키 길이는 1000 바이트입니다 - mysql 5.0.91

#1071 - Specified key was too long; max key length is 1000 bytes

내 MySQL을 5.0.91으로 호스팅에 URL을 저장하는 가장 좋은 방법은 무엇입니까?

+1

'텍스트'와 그 변종은 가장 적합합니다. – PhD

+0

이들의 유용 경우 참조 (항상 오류 메시지가 연구) : http://stackoverflow.com/search?q=+%231071+-+Specified+key+was+too+long%3B+max+key+ length + is + 1000 + bytes 또는 http://stackoverflow.com/questions/tagged/mysql-error-1071 –

+3

두 가지 질문을하는 것이 좋습니다. URL을 저장하는 가장 좋은 방법은 다음과 같습니다. http://stackoverflow.com/a/219664/398242 오류의 원인 및 해결 방법 : http://stackoverflow.com/questions/1814532/1071-specified-key-was-too -long-max-key-length-is-767-bytes/1814594 # 1814594 –

답변

0

db에서 utf-16 데이터 정렬을 선택 했으므로 오류가 발생했습니다. utf-8 general-ci로 다시 전환되었으므로 사라졌습니다.

5

당신의 URL 열에 unique=True을 사용합니까? MySQL은 그 컬럼에 유일한 인덱스를 만들고 있으며, 문자에 따라 사용하는 바이트 수는 인코딩에 따라 다릅니다.

예를 들어 UTF-16 인 경우 문자 당 2 바이트를 사용하므로 varchar(2000) 열은 4000 바이트가되며 오류 메시지에 표시된 것처럼 최대 키 길이는 1000 바이트입니다.

대신 UTF-8로 전환하고 varchar(900)을 사용하여이 문제를 해결할 수 있습니다.

0
처럼 이메일 필드를 다시 작성

:

$table->string('email', 250)->unique(); 
0

Laravel은 데이터베이스에 "이모티콘"을 저장하기위한 지원을 포함 기본적으로 설정 utf8mb4 문자를 사용합니다. 5.7.7 이전 버전의 MySQL 또는 10.2.2 이전 버전의 MariaDB를 실행하는 경우, MySQL이 인덱스를 생성하기 위해 마이그레이션에 의해 생성 된 기본 문자열 길이를 수동으로 구성해야 할 수도 있습니다. 당신은 당신의 AppServiceProvider스키마 :: defaultStringLength 메소드를 호출하여이를 구성 할 수 있습니다 :

use Illuminate\Support\Facades\Schema; 

/** 
* Bootstrap any application services. 
* 
* @return void 
*/ 
public function boot() 
{ 
    Schema::defaultStringLength(191); 
}