Data truncation: Data too long for column 'chain_of_ids' at row 1

MYSQL 8+ версии

Есть таблица для рекурсивного запроса id,name,parentId Максимальный уровень вложенности 8 Искал в интернете как решить эту проблему - все говорят увеличить размерность поля существующей таблицы, но в моём запросе таблицы не существует на жестком диске. Ошибка в том что во втором выражении получается слишком длинная строка, НО! я пробовал

менять CONCAT(id,'') на CONCAT(id,'___________________________________________________')

И CONCAT(at.chain_of_ids,',',c.id) на CONCAT(at.chain_of_ids,',') - это работает без ошибки, хотя строка получается намного длинней чем ожидается от изначального запроса,

также я натыкаюсь на эту ошибку если менять CONCAT(at.chain_of_ids,',',c.id) на CONCAT(at.chain_of_ids,',_')

WITH RECURSIVE `accumulation_table` AS (
    SELECT `id`,`name`, CONCAT(`id`,'') AS `chain_of_ids` FROM `Category` WHERE `parentId` = 0
    UNION ALL
    SELECT c.`id`,c.`name`, CONCAT(at.`chain_of_ids`,',',c.`id`) AS `chain_of_ids`
    FROM `Category` c
    JOIN `accumulation_table` at ON at.id=c.parentId
)
SELECT * FROM `accumulation_table` a

Ответы (1 шт):

Автор решения: Mike

В первой части запроса используйте явное указание типа и длины данных для поля. С помощью cast(id as char(100)). Если этого не сделать, то MySQL пытается понять используемый тип данных автоматически. Строковые функции на подобии concat() или строки фиксированной длины сообщают MySQL тип данных char с минимально возможной длиной. Т.е. для id=10 он выдаст после преобразования тип char(2). Во второй части запроса MySQL уже не меняет выбранный тип данных и пытается добавлять новые символы к короткой строке, что вызывает переполнение.

→ Ссылка