it-swarm.com.ru

Ошибка MySQL: максимальный размер столбца составляет 767 байт.

Когда я запускаю программу, которая что-то делает с MySQL, я получаю это сообщение об ошибке:

2015-06-10 15: 41: 12,250 ОШИБКА app.wsutils 419 INCRON: Ошибка: ('HY000', '[HY000] [MySQL] [ODBC 5.2 (w) драйвер] [mysqld-5.7.7-rc -log] Индексный столбец Размер слишком большой. Максимальный размер столбца составляет 767 байт. (1709) (SQLExecDirectW) ')

Я немного погуглил и обнаружил, что эта ошибка может быть связана с опцией innodb_large_prefix. Тем не менее, я использую MySQL 5.7.7 rc, который уже установил для innodb_large_prefix значение «ON» (проверено в MySQL Workbench), что позволяет использовать до 3072 байтов. Я не уверен, если это проблема с innodb_large_prefix или нет.

В любом случае, у кого-нибудь есть идея, как решить эту проблему?

8
user3570615

Ваш столбец, который вы пытаетесь проиндексировать, слишком велик, и ваши настройки не должны быть правильными для innodb_large_prefix. Существует пара параметров prerequisites , которые также должны быть установлены для правильной работы innodb_large_prefix.

Вы можете проверить, что innodb_large_prefix установлено, запустив:

show global variables like 'innodb_lar%';

Вот пара предварительных условий для использования innodb_large_prefix:

Вам нужно установить глобальную переменную innodb_file_format = BARRACUDA

чтобы проверить настройки, запустите: show global variables like 'innodb_fil%';

На уровне таблицы вы должны использовать ROW_FORMAT = DYNAMIC или ROW_FORMAT = COMPRESSED

для Innodb строки по умолчанию сохраняются в формате COMPACT (ROW_FORMAT = COMPACT). 

15
BK435

С помощью ответа, данного BK435, я сделал следующее и решил проблему.

set global innodb_file_format = BARRACUDA;
set global innodb_large_prefix = ON;
create table test (........) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
13
Sasank Mukkamala

У меня была та же ошибка, несмотря на то, что innodb_large_prefix настроен правильно.

Проблема заключалась в использовании сопоставления. В моей базе данных по умолчанию для параметров сортировки установлено utf8mb4_bin (вы можете проверить это на вкладке «Операции» в phpmyadmin для базы данных). Это означает, что он использует 4 байта на символ, а сопоставление utf8 (например, utf8_unicode_ci) использует 3 байта на символ.

в этом случае вы можете использовать другое сопоставление, например, добавив DEFAULT CHARSET=utf8 в конце оператора CREATE TABLE, или ограничьте размер индекса, используя только часть значения столбца наподобие KEY 'identifier' (column1(5),column2(10)).

См. Также связанный вопрос: # 1071 - Указанный ключ был слишком длинным; максимальная длина ключа 767 байт

0
Tymoteusz Motylewski

У меня была эта проблема, потому что я пытался создать первичный ключ String с помощью varchar (254). Легко пропустить иногда .. Так что дважды проверьте ваш тип и длину индекса :)

0
Simon Lippens

В моем случае (MySQL версии 5.6) проблема заключалась в том, что я пытался создать таблицу со столбцом, который может содержать до 256 символов (база данных использует параметры сортировки utf8), поэтому 3 байта на 1 символ utf8 = 256 * 3 = 768 байт. Исправление состояло в том, чтобы просто иметь 255 символов вместо 256. 

Я мог бы также установить innodb_large_prefix, как предлагают другие, но в моем случае было проще просто иметь меньше символов.

0
Ievgen