Re: excellent performance speed.
If it's Ok to have one more difference between the first and the remaining expression, you could do this:
substring(substring_index(@v1:='what,fun,no?',',',@n:=1),character_length(substring_index(@v1,',',@n-1))+1)
for the first one (+1 instead of +1+if(@n=1,0,1))
and this:
substring(substring_index(@v1,',',@n:=@n+1),character_length(substring_index(@v1,',',@n-1))+2)
for the remaining expressions (+2 instead of +1+if(@n=1,0,1)):
mysql> select substring(substring_index(@v1:='yes,this,really,is,fun',',',@n:=1),character_length(substring_index(@v1,',',@n-1))+1) c1
-> , substring(substring_index(@v1,',',@n:=@n+1),character_length(substring_index(@v1,',',@n-1))+2) c2
-> , substring(substring_index(@v1,',',@n:=@n+1),character_length(substring_index(@v1,',',@n-1))+2) c3
-> , substring(substring_index(@v1,',',@n:=@n+1),character_length(substring_index(@v1,',',@n-1))+2) c4
-> , substring(substring_index(@v1,',',@n:=@n+1),character_length(substring_index(@v1,',',@n-1))+2) c5
-> ;