[RUBY-ON-RAILS] MySQL의 :: 오류 : 지정된 키가 너무 깁니다; 최대 키 길이는 1000 바이트입니다
RUBY-ON-RAILSMySQL의 :: 오류 : 지정된 키가 너무 깁니다; 최대 키 길이는 1000 바이트입니다
script/generate acts_as_taggable_on_migration
rake db:migrate
원인
Mysql::Error: Specified key was too long; max key length is 1000 bytes: CREATE INDEX `index_taggings_on_taggable_id_and_taggable_type_and_context` ON `taggings` (`taggable_id`, `taggable_type`, `context`)
어떻게해야합니까?
여기 내 데이터베이스 인코딩은 다음과 같습니다
mysql> SHOW VARIABLES LIKE 'character\_set\_%';
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
+--------------------------+--------+
7 rows in set (0.00 sec)
해결법
-
==============================
1.이것은 전적으로 MySQL의 문제입니다 -
이것은 전적으로 MySQL의 문제입니다 -
MySQL은 다른 엔진이있다 -의 MyISAM, InnoDB의 메모리를 ...
MySQL은 당신이 컬럼에 인덱스 (들)을 정의하는 데 사용할 수있는 공간의 크기에 다른 제한이있다 -는 1,000 바이트의의 MyISAM를 들어; 그것은 이노 767입니다. 그리고 그 열 문제의 데이터 유형 - (100 자 3 = 300 * 때문에)는 VARCHAR (100)에 대한 인덱스는 그 바이트 (300)를 취할 것입니다, 그래서 VARCHAR에 대한, 그것은 3 배입니다.
당신이 천장 값을 명중 일부 색인을 수용하기 위해, 당신은 열 데이터 형식의 부분과 관련하여 인덱스를 정의 할 수 있습니다 :
CREATE INDEX example_idx ON YOUR_TABLE(your_column(50))
그 your_column 가정하면 VARCHAR (100)만이 제 50 개 문자 것 위의 실시 예에서의 인덱스이다. 50 문자 이상으로 데이터를 검색하면 인덱스를 사용할 수 없습니다.
-
==============================
2.http://bugs.mysql.com/bug.php?id=4541이 여기에보고 된 버그를 것 같다
http://bugs.mysql.com/bug.php?id=4541이 여기에보고 된 버그를 것 같다
당신은 모든이 게시물에 답변 여전히 오류가 시도하는 경우에, 당신은 당신의 SQL 쿼리 창에서이 명령을 실행하려고 할 수 있습니다.
set GLOBAL storage_engine='InnoDb';
-
==============================
3.이 오류는 이전처럼 일부 였는지를 발생할 경우가 MySQL을 구성 파일을 변경함으로써 해결 될 수있다 (* .INI)를
이 오류는 이전처럼 일부 였는지를 발생할 경우가 MySQL을 구성 파일을 변경함으로써 해결 될 수있다 (* .INI)를
default-storage-engine=InnoDB
-
==============================
4.나는 당신의 필드 중 하나가 1000 개 이상의 문자와 VARCHAR 생각합니다. 예를 들면 문맥?
나는 당신의 필드 중 하나가 1000 개 이상의 문자와 VARCHAR 생각합니다. 예를 들면 문맥?
인덱스의 의미에 대해 생각해보십시오. 모든 인덱스 필드는 where 절 내에있는 때 행에 빠르게 액세스 할 수 있습니다. 인덱스가 긴 (MySQL의 1000 개 이상의 바이트의 경우) 인 경우는 느린 전체 테이블 스캔과 전체 테이블에 액세스하는 것보다 아마 때문에, 그것은, 인덱스를 사용하는 것이 이해되지 않는다.
나는 그 두 번 짧은 경우, taggable_id 및 taggable_type에 인덱스, 예컨대을 단축하는 것이 좋습니다 것입니다.
건배 - 게르하르트
from https://stackoverflow.com/questions/3489041/mysqlerror-specified-key-was-too-long-max-key-length-is-1000-bytes by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 루비 블록 구문 오류 [중복] (0) | 2020.02.06 |
---|---|
[RUBY-ON-RAILS] 새로운 데이터는 포스트 그레스에 레일 배열 열을 지속하지 (0) | 2020.02.06 |
[RUBY-ON-RAILS] 종이 클립 예외 : 종이 클립 :: AdapterRegistry :: NoHandlerError (0) | 2020.02.06 |
[RUBY-ON-RAILS] 어떻게 레일 4.2 개발 서버의 IP를 기본 바인딩을 변경하려면? (0) | 2020.02.06 |
[RUBY-ON-RAILS] WHERE IN 절을 사용하여 인덱스를 사용하지 않는 MySQL은? (0) | 2020.02.06 |