Указанный ключ слишком длинный — максимальная длина ключа составляет 767 байт.

Когда я выполнил следующую команду:

create table assessment (
    id integer not null auto_increment unique,
    assignment_weight_type tinyint not null,
    description varchar(255),
    end_date datetime not null,
    from_grade tinyint not null,
    f_id tinyint not null,
    name varchar(255) not null,
    start_date datetime not null,
    status tinyint not null,
    weight smallint,
    school_id integer not null,
    school_year_id integer not null,
    s_id integer, primary key (id),
    unique (name, school_id, school_year_id, from_grade, f_id)
) ENGINE=InnoDB;

Я получил это сообщение об ошибке:

Specified key was too long; max key length is 767 bytes

Я использую кодировку utf8mb4. Так почему же я получил сообщение об ошибке?


person Community    schedule 25.05.2012    source источник
comment
возможный дубликат #1071 - указанный ключ был слишком длинным; максимальная длина ключа 767 байт   -  person Paul Bellora    schedule 25.05.2012


Ответы (3)


utf8mb4 использует до четырех байтов на символ, поэтому имя само по себе может занимать до 1020 байт.

person Sergey Kalinichenko    schedule 25.05.2012
comment
+1 опередил меня. Если вы хотите, чтобы поле имело длину 255 байт, а не 255 символов, используйте поле varbinary. - person Niet the Dark Absol; 25.05.2012

У меня также была такая же проблема, я установил значение для этой переменной в mysql, как показано ниже, и это устранило проблему.

1.global.innodb_large_prefix = 1

2.innodb_file_format=Барракуда

3.innodb_file_format_max=Барракуда

person Techie    schedule 07.12.2017

Используйте эту команду для создания базы данных.

 create database <DATABASE_NAME> character set latin1;
person senthalan    schedule 23.05.2018
comment
Первоначально MySQL по умолчанию использовал набор символов latin1, который хранил символы в 2-байтовой последовательности. Если мы используем это, мы можем получить больше длины, чтобы сохранить длину ключа. - person senthalan; 23.05.2018
comment
Ага. Но ОП спросил о столбцах, содержащих символы UTF8. И я не думаю, что он захочет пропустить это требование шесть лет спустя - person Nico Haase; 23.05.2018
comment
Я также столкнулся с этой проблемой, и я решил использовать это. Поэтому я подумал, что это будет полезно и для этого. - person senthalan; 23.05.2018
comment
Если вы не хотите использовать UTF8, все в порядке. Но это не соответствует запрошенному варианту использования - person Nico Haase; 23.05.2018