MySQL изменить innodb_large_prefix

Я просто установил Debian 8.3 на ВМ и установил xampp после этого урока. Все работает, пока я не попытался создать новую таблицу:

create table testtable
(
  id int(10) not null auto_increment,
  firstname varchar(255) collate utf8mb4_german2_ci not null,
  lastname varchar(255) collate utf8mb4_german2_ci not null,
  primary key (id),
  unique key (lastname)
)engine = innodb default charset=utf8mb4, collate=utf8mb4_german2_ci

Я получил ошибку: #1709 - Index column size too large. The maximum column size is 767 bytes. Тогда я узнал, что это исходит от prefix limitation который ограничен 767Byte в Innodb и я могу это исправить, установив innodb_large_prefix в файле my.cnf. Но я не могу найти файл, его нет под /etc/ и нет /etc/mysql/ папка, единственная my.cnf Я нашел в /opt/lampp/etc/ Однако после того, как я добавил innodb_large_prefix=1 в файл и перезапустил lampp. Я все еще получаю ту же ошибку. Что я сделал не так?

редактировать: SELECT version() возвращается 5.6.14, так innodb_large_prefix должен быть поддержан.

edit2: я знаю, что могу обойти это, только установив часть ключа в качестве индекса, чтобы получить меньше 767Byte. Но я хочу знать, как правильно настроить MySQL.

7 ответов

Решение

Между 5.6.3 и 5.7.7 (то есть, если вы используете MySQL 5.6 или MariaDB 10.0), есть 4 шага:

  • SET GLOBAL innodb_file_format = Барракуда;
  • SET GLOBAL innodb_file_per_table = ON;
  • ROW_FORMAT = ДИНАМИЧНЫЙ; - или СЖАТЫЙ (идет до конца СОЗДАТЬ)
  • innodb_large_prefix = 1

Заметка

SELECT * FROM information_schema.INNODB_SYS_TABLESPACES;

предоставит file_format и row_format. Некоторые другие таблицы I_S предоставляют подсказки file_per_table.

Я использую Mysql 5.6.17 с сервером WAMP. Я решил проблему, отредактировав файл my.ini. Найдите категорию [mysqld] и добавьте следующие инструкции.

[mysqld]
innodb_file_format = Barracuda
innodb_large_prefix = 1
innodb_file_per_table = ON

Не забудьте сохранить изменения и перезапустить все сервисы.

Для постоянного решения, пожалуйста, добавьте следующее в свой файл mariadb My.INI:

## Innodb settings to bypass error of max size 737
innodb-file-format=barracuda
innodb-file-per-table=ON
innodb-large-prefix=ON
## Above 3 didnot work so i added below
innodb_default_row_format = 'DYNAMIC'

Я использовал 10.1.38

Перейдите в свой xampp и добавьте этот запрос:

`mysql>` set global innodb_file_format = `BARRACUDA`;
`mysql>` set global innodb_large_prefix = `ON`;
mysql> set global innodb_file_format = `BARRACUDA`;
mysql> set global innodb_large_prefix = `ON`;

Я использую Mysql 8.0^, я получил эту ошибку при попытке выполнить ремесленную миграцию PHP на laravel 9. Чтобы решить эту проблему, перейдите на сервер Wamp, наведите курсор на Mysql, откройте и отредактируйте my.ini , шаг 1. Изменитьdefault-storage-engine=MYISAMкdefault-storage-engine=InnoDBэто конечная настройка

СОХРАНИТЕ И ПЕРЕЗАПУСТИТЕ ВСЕ СЛУЖБЫ

Для тех, кто хочет использовать файл конфигурации MySQL

Измените это на

      innodb-default-row-format=compact

этот

      innodb-default-row-format=dynamic

Читайте: «Использование файлов опций» с сайта dev.mysql.com.

Другие вопросы по тегам