2010-01-26 5 views
4
mysql> create table newsgroup(
    -> id integer unsigned NOT NULL AUTO_INCREMENT, 
    -> creater integer unsigned NOT NULL, 
    -> coremember integer unsigned DEFAULT NULL, 
    -> name varchar(300) not null unique, 
    -> description text, 
    -> created datetime not null, 
    -> PRIMARY KEY (id) 
    ->); 
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes 
mysql> 

내가 300에서 250으로 바뀌 었습니다. 괜찮습니다. 그러나 나는 정말로 이해하지 못합니다.이 진술에 어떤 문제가 있습니까?

+0

MySQL 서버 버전이란 무엇입니까? – vfn

+0

상대 응답은 [this] (http://stackoverflow.com/questions/6157823/specified-key-was-too-long-max-key-length-is-1000-bytes/6158040#6158040)이고 [그] (http://stackoverflow.com/questions/4131206/mysql-key-was-too-long-issue/4139541#4139541). –

답변

6

데이터베이스 암호화가 UTF8 문자, MySQL3 바이트 그래서 767 바이트까지 걸릴 수 있습니다 UTF8

로 설정되어 255 자입니다.

긴 텍스트 필드에 UNIQUE 색인을 만드는 것은 좋지 않습니다.

대신, 접두사 검색을위한 충분한 일반 접두사 인덱스

CREATE INDEX ix_newsgroup_name ON newsgroup (name (30)) 

를 만들고, 고유성을 보장 할 것 MD5 해시를 저장하는 다른 열을 추가합니다.

0

utf-8 또는 더 무거운 문자 세트를 사용하고 있으므로 모든 기호는 1, 2, 3 또는 4 바이트로 표시됩니다. MySQL에서 utf8은 최대 3 바이트 시퀀스를 나타내며 최대 4 바이트 시퀀스는 utf8mb4을 나타냅니다.

-1

은 VARCHAR에서 UNIQUE를 제거합니다.

+0

내가 당신을 뽑았습니다. – user198729

관련 문제