ошибка mysql: указанный ключ слишком длинный; максимальная длина ключа 767 байт

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

ALTER таблица XYZ изменить значение VARCHAR(1024);

Когда я запускаю его, я получаю эту ошибку.

ОШИБКА 1071 (42000) в строке 1: указанный ключ слишком длинный; максимальная длина ключа 767 байт

Первоначальный размер столбца был 250. Вот что странно. У меня есть второй сервер MySQL с идентичными конфигурациями, и он выполняет двустороннюю репликацию с первым сервером. Когда я запускаю эту команду «изменить таблицу» на своем втором сервере MySQL, я не получаю этой ошибки. Фактически, после завершения выполнения команды alter эта команда была реплицирована на мой основной сервер mysql без каких-либо ошибок.

Мои два сервера mysql настроены как активные-активные, но активно используется только один из них. Итак, чтобы уточнить, я получил эту ошибку «максимальная длина ключа» на активно используемом сервере. Но он работал нормально на втором сервере, который не использовался.

Кто-нибудь знает, почему команда find запустилась на моем втором сервере?

Спасибо../Кен


person user3780273    schedule 26.06.2014    source источник
comment
У вас есть 2 разные версии mysql на серверах, и, следовательно, вы получаете это stackoverflow.com/questions/13506832/   -  person Abhik Chakraborty    schedule 26.06.2014


Ответы (2)


Возможно, вам потребуется изменить индекс в этой таблице.

DROP INDEX index_name ON tbl_name;
CREATE INDEX index_name ON tbl_name (col1,col2(100));

Где col2 — столбец значений из вашего примера, а 100 — максимальное количество символов для включения в индекс.

Если вы не уверены в индексах таблицы, попробуйте следующее (заменив tbl_name на имя вашей таблицы).

SHOW INDEXES IN tbl_name;
person HarmonicApps    schedule 26.06.2014

Я также столкнулся с той же проблемой, когда для кодировки базы данных установлено значение UTF8.

Если вы используете latin1, то самый большой столбец, который вы можете индексировать, — это varchar (767), но если вы используете utf8, то предел — varchar (255).

Попробуйте изменить длину значения на 255.

Это может сработать.

Следующая ссылка может привести вас к тому же.

http://mechanics.flite.com/blog/2014/07/29/using-innodb-large-prefix-to-avoid-error-1071/

person Ajit K'sagar    schedule 18.03.2016