2012-05-25 16 views
6

Cuando ejecuta el siguiente comando:clave especificada es demasiado largo - longitud de clave máxima es de 767 bytes

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; 

Tengo este mensaje de error:

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

estoy usando un juego de caracteres de utf8mb4. Entonces, ¿por qué recibí el mensaje de error?

+0

funciona en mi servidor – zerkms

+0

posible duplicado de [# 1071 - especificado clave era demasiado largo; la longitud máxima de la clave es 767 bytes] (http://stackoverflow.com/questions/1814532/1071-specified-key-was-too-long-max-key-length-is-767-bytes) –

Respuesta

5

utf8mb4 utiliza hasta cuatro bytes por carácter, por lo que el nombre podría ocupar tanto como 1020 bytes por sí mismo.

+2

+1 me ganaron eso. Si desea que un campo tenga 255 bytes de longitud y no 255 caracteres, use un campo 'varbinary'. –

1

También recibía el mismo problema, AJUSTE valor para estas variables en mysql como a continuación y se corrigió el problema.

1.global.innodb_large_prefix = 1

2.innodb_file_format = Barracuda

3.innodb_file_format_max = Barracuda

Cuestiones relacionadas