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.