La differenza principale è l'accuratezza dell'ordinamento (quando si confrontano i caratteri nella lingua) e le prestazioni. L'unico speciale è utf8_bin che serve per confrontare i caratteri in formato binario.
utf8_general_ci
è un po' più veloce di utf8_unicode_ci
, ma meno accurato (per l'ordinamento). La codifica utf8 del linguaggio specifico (come utf8_swedish_ci
) contengono regole linguistiche aggiuntive che le rendono le più accurate da ordinare per quelle lingue. La maggior parte delle volte uso utf8_unicode_ci
(Preferisco la precisione a piccoli miglioramenti delle prestazioni), a meno che non abbia una buona ragione per preferire una lingua specifica.
Puoi leggere di più su specifici set di caratteri Unicode nel manuale MySQL - http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html