Aurora MySQL без сервера дает "слишком большой размер столбца индекса", несмотря на правильные настройки
Я пытаюсь добавить индекс к существующей таблице в рамках процесса обновления форумов Invision Community. База данных размещена в AWS Aurora Serverless, которая совместима с MySQL 5.6. Однако каждый раз я получаю сообщение об ошибке:
ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.
Вот подробности о таблице и схеме:
+---------------+--------+---------+------------+-------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+--------------------+----------+--------------------+---------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+---------------+--------+---------+------------+-------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+--------------------+----------+--------------------+---------+
| ibf_core_tags | InnoDB | 10 | Dynamic | 36862 | 299 | 11026432 | 0 | 13189120 | 4194304 | 95183 | NULL | NULL | NULL | utf8mb4_unicode_ci | NULL | row_format=DYNAMIC | |
+---------------+--------+---------+------------+-------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+--------------------+----------+--------------------+---------+
+--------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+----------------+
| tag_id | bigint(20) | NO | PRI | NULL | auto_increment |
| tag_aai_lookup | char(32) | NO | MUL | | |
| tag_aap_lookup | char(32) | NO | MUL | | |
| tag_meta_app | varchar(200) | NO | MUL | | |
| tag_meta_area | varchar(200) | NO | | | |
| tag_meta_id | int(10) | NO | | 0 | |
| tag_meta_parent_id | int(10) | NO | | 0 | |
| tag_member_id | int(10) | NO | MUL | 0 | |
| tag_added | int(10) | NO | MUL | 0 | |
| tag_prefix | int(1) | NO | | 0 | |
| tag_text | varchar(255) | YES | | NULL | |
+--------------------+--------------+------+-----+---------+----------------+
Кодировка по умолчанию для таблицы - utf8mb4, а innodb_large_prefix
настройка ON
,
Операция, которую я пытаюсь сделать:
ALTER TABLE `ibf_core_tags` ADD KEY `tag_text` (`tag_text`(191));
Я бы подумал, что 191 * 4 = 764, что меньше значения в 767 байт, которое, по его словам, я превышаю. Это ошибка в Aurora Serverless? Есть ли способ обойти эту проблему? Я попытался изменить таблицу на MyISAM, чтобы добавить индекс, но на самом деле я получаю ту же ошибку, когда пытаюсь это сделать.
Используя локальную установку MySQL 5.6, я смог выполнить этот запрос ALTER TABLE для той же базы данных, поэтому я не уверен, почему Aurora Serverless отличается.
0 ответов
У меня была такая же проблема с проектом Slim PHP, использующим Laravel для подключений к БД. По умолчанию AWS Aurora Serverless использует формат файлаAntelope
по умолчанию используется формат строки COMPACT
. Нам нужен файл форматаBarracuda
и формат строки DYNAMIC
чтобы разрешить большие префиксы ключа индекса (ссылка).
Я создал настраиваемую группу параметров и явно установил следующие параметры:
innodb_file_format
знак равноBarracuda
innodb_file_per_table
знак равно1
innodb_large_prefix
знак равно1
Эти параметры можно установить в соответствии с документацией AWS Aurora Serverless.
Однако установка этих параметров сама по себе не устранила проблему. Таблицы все еще создавались с форматом строкиCOMPACT
. В параметрах подключения к БД мне также пришлось установить'engine' => 'InnoDB ROW_FORMAT=DYNAMIC'
(ссылка). Этот синтаксис предназначен для Laravel, но, надеюсь, он указывает другим в правильном направлении, поскольку я только что потратил на это целый день:)