First, normalize the line by deleting the empty space and making sure that there is% at the end:
select replace(concat(user_location,'%'),'%%','%') as str from YourTable where user_id = 1
Then we can count the number of entries with a trick. Replace โ%โ with โ%โ and count the number of spaces added to the string. For instance:
select length(replace(str, '%', '% ')) - length(str) as LocationCount from ( select replace(concat(user_location,'%'),'%%','%') as str from YourTable where user_id = 1 ) normalized
Using substring_index, we can add columns for multiple locations:
select length(replace(str, '%', '% ')) - length(str) as LocationCount , substring_index(substring_index(str,'%',1),'%',-1) as Loc1 , substring_index(substring_index(str,'%',2),'%',-1) as Loc2 , substring_index(substring_index(str,'%',3),'%',-1) as Loc3 from ( select replace(concat(user_location,'%'),'%%','%') as str from YourTable where user_id = 1 ) normalized
In your example, US%UK%JAPAN%CANADA this prints:
LocationCount Loc1 Loc2 Loc3 4 US UK JAPAN
So you see that this can be done, but parsing strings is not a SQL strength.