Główną różnicą jest dokładność sortowania (przy porównywaniu znaków w języku) i wydajność. Jedynym specjalnym jest utf8_bin, który służy do porównywania znaków w formacie binarnym.
utf8_general_ci jest nieco szybszy niż utf8_unicode_ci , ale mniej dokładny (do sortowania). kodowanie utf8 w określonym języku (np. utf8_swedish_ci ) zawierają dodatkowe reguły językowe, dzięki którym są one najdokładniejsze do sortowania dla tych języków. Przez większość czasu używam utf8_unicode_ci (Wolę dokładność od drobnych ulepszeń wydajności), chyba że mam dobry powód, aby preferować określony język.
Możesz przeczytać więcej na temat określonych zestawów znaków Unicode w podręczniku MySQL - https://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html