Почему в MySQL 8.0 при последовательной записи через пользовательскую функцию в автоинкрементном id образуются пропуски?
MySQL выделяет блок следующих ID до начала выполнения запроса, основываясь на максимальном количестве вставляемых запросом строк.
Если какие-то строки не вставились (INSERT IGNORE, ошибка при вставке и т.п.), то выделенные ID обратно не возвращаются, поскольку за это время следующие за ними ID могли быть выделены следующим запросам.
А зачем эти извращения? Есть гарантированно конкурентно-безопасный LAST_INSERT_ID()
У вас insert ignore используется. Значит, данные натыкаются на уникальные индексы? auto_increment при этом штатно тикает.
Вообще auto_increment - это гарантированная уникальность. Если вы хотите "без пропусков" - вы взяли не тот инструмент.