La principale différence est la précision du tri (lors de la comparaison des caractères dans la langue) et les performances. Le seul spécial est utf8_bin qui permet de comparer des caractères au format binaire.
utf8_general_ci
est un peu plus rapide que utf8_unicode_ci
, mais moins précis (pour le tri). Le codage utf8 spécifique à la langue (comme utf8_swedish_ci
) contiennent des règles de langue supplémentaires qui les rendent les plus précises à trier pour ces langues. La plupart du temps j'utilise utf8_unicode_ci
(Je préfère la précision aux petites améliorations de performances), sauf si j'ai une bonne raison de préférer une langue spécifique.
Vous pouvez en savoir plus sur les jeux de caractères Unicode spécifiques dans le manuel MySQL - http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html