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, но, надеюсь, он указывает другим в правильном направлении, поскольку я только что потратил на это целый день:)