Et langt stykke nede på MySQL 8 CTE manualsiden
er et eksempel, der viser det problem, du har. Grundlæggende er problemet, at dine ids kolonnen er for smal til ABC værdi, der tildeles den, når den får sin bredde fra den ikke-rekursive del af CTE'en (som faktisk er længden af id dvs. 2 tegn). Du kan løse det problem med en CAST til en stor nok bredde til at passe til alle resultater, f.eks.:
with recursive cte(greatest_id, ids, total) as (
select id,
CAST(id AS CHAR(5)) AS ids,
val
from tbl
union all
select tbl.id,
concat(cte.ids, tbl.id),
cte.total + tbl.val
from cte
inner join tbl
on tbl.id > cte.greatest_id
and cte.total + tbl.val <= 6
)
select ids, total from cte