Você não deseja armazenar o valor no formulário separado por vírgulas.
Considere o caso quando você decide unir esta coluna com alguma outra tabela.
Considere que você tem,
x items
1 1, 2, 3
1 1, 4
2 1
e você deseja encontrar valores distintos para cada x, ou seja:
x items
1 1, 2, 3, 4
2 1
ou pode querer verificar se tem 3 nele
ou pode querer convertê-los em linhas separadas:
x items
1 1
1 2
1 3
1 1
1 4
2 1
Será uma DOR ENORME.
Use pelo menos o 1º princípio de normalização - tenha uma linha separada para cada valor.
Agora, digamos que originalmente você tinha isso como tabela:
x item
1 1
1 2
1 3
1 1
1 4
2 1
Você pode facilmente convertê-lo em valores csv:
select x, group_concat(item order by item) items
from t
group by x
Se quiser pesquisar se x =1 tem o item 3. Fácil.
select * from t where x = 1 and item = 3
que no caso anterior usaria horrível
find_in_set
:select * from t where x = 1 and find_in_set(3, items);
Se você acha que pode usar like com valores CSV para pesquisar, primeiro
like %x%
não pode usar índices. Segundo, produzirá resultados errados.Digamos que você queira verificar se o item ab está presente e você faz
%ab%
ele retornará linhas com abc abcd abcde .... . Se você tiver muitos usuários e itens, sugiro criar uma tabela separada
users
com um ID de usuário PK, outros items
com PK itemid e por último uma tabela de mapeamento user_item
tendo colunas userid, itemid. Se você sabe que precisará apenas armazenar e recuperar esses valores e não fazer nenhuma operação nele, como junção, pesquisa, distinção, conversão para linhas separadas etc. etc. - pode ser apenas pode ser, você pode (eu ainda faria 't).