A principal diferença é a precisão da classificação (ao comparar caracteres no idioma) e o desempenho. O único especial é o utf8_bin que serve para comparar caracteres em formato binário.
utf8_general_ci
é um pouco mais rápido que utf8_unicode_ci
, mas menos preciso (para classificação). A codificação utf8 do idioma específico (como utf8_swedish_ci
) contêm regras de idioma adicionais que os tornam os mais precisos para classificar esses idiomas. Na maioria das vezes eu uso utf8_unicode_ci
(Prefiro precisão a pequenas melhorias de desempenho), a menos que tenha um bom motivo para preferir um idioma específico. Você pode ler mais sobre conjuntos de caracteres unicode específicos no manual do MySQL - http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html