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 - http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html