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

Относительными ответами являются [это] (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

UTF8 персонаж может занять до 3 байт в MySQL, поэтому 767 байт является 255 символов.

Создание индекса UNIQUE в таких длинных текстовых полях не рекомендуется.

Вместо этого можно создать простую приставку индекс

CREATE INDEX ix_newsgroup_name ON newsgroup (name (30)) 

, которое достаточно для приставочные поисков, и добавить еще один столбец для хранения MD5 хэша, который обеспечивал бы уникальность.

0

Вы используете utf-8 или даже более тяжелую кодировку, и поэтому каждый символ представлен одним, двумя, тремя или четырьмя байтами. В MySQL utf8 обозначает максимальную 3-байтную последовательность и utf8mb4 для максимальной 4-байтовой последовательности.

-1

удалить UNIQUE из VARCHAR.

+0

Это не я, что проголосовали за вас ... – user198729

Смежные вопросы